python和Java程序跨语言协作
最近有一个需求,就是需要拿Java程序运算更新的结果到python中调库训练图网络,所以需要两边的一些数据进行交互,经过调查选择了如下方法,记录如下:
1. Jython在Java中运行python程序
优点是简单,而且更像是一个完整的程序,python的库可以在Java的虚拟机中被重新编译运行;缺点是有的库不太支持,可能是没人更新这些库或者工作量太大没人整完,这次我需要用到的DGL库就没有支持Jython的平替方案。
总体方法如下:
首先是添加jar包,如果项目是用maven或者gradle可以直接添加依赖,但是我的项目不是用这些工具构建的,所以我需要手动添加到Java库中:jython-standalone
然后是测试是不是正确添加以及流程是否正确,这里略过结果。
问题出在了python程序如果较大的话,要注意,需要把整个流程封装到一个函数里,也就是我这样:
然后需要传入的参数写到这个函数的参数列表中,因为Java中给python程序传参,不是直接给到python的文件中,而是给到python文件中的某一个指定的函数中。
最后如果没有库缺失,应该就可以成功,我在这里失败了,因为我的DGL库缺失,没有被成功重新编译成Java支持的语言,所以失败了。放弃了这个方法。
2. 通过本地文件实现数据在python程序和Java程序之间来回流动
逻辑是Java进行计算,python进行预测。工作是用一个json文件监测程序流动。
这里我用一个status实现两边状态的来回切换,status作为一个布尔值,控制着两边的程序接力运行,用轮询来实现这一过程。
在上图这里给出网络的txt源数据(后续再给到config.properties)
seriously主函数中还有三处data.json,大家随便在计算机的任何可访问位置添加一个空白json文件,把绝对路径替换seriously
中三处data.json
即可
在python文件中,大家修改Link.py
中两处data.json路径即可,方法同上:
参考资料:
Google Code Archive - Long-term storage for Google Code Project Hosting.
参与讨论
(Participate in the discussion)
参与讨论