Jef*_*rey 50 python java integration
我有一个需要与第三方库集成的Java应用程序.该库是用Python编写的,我对此没有任何发言权.我正试图找出与它集成的最佳方式.我正在尝试JEPP(Java嵌入式Python) - 以前有人用过吗?我的另一个想法是使用JNI与Python的C绑定进行通信.
任何关于最佳方式的想法将不胜感激.谢谢.
Mar*_*cin 19
坦率地说,大多数以某种方式直接从JVM中运行Python的方法都不起作用.它们要么不完全兼容(你的第三方库的新版本可以使用python 2.6功能,不能与Jython 2.5一起使用)或hacky(它会破坏神秘的JVM堆栈跟踪,而不是真正导致解决方案).
我首选的方法是使用RPC.如果您有适量的数据,XML RPC在这里不是一个糟糕的选择.它得到了很好的支持 - Python在其标准库中有它.Java库也很容易找到.现在,根据您的设置,Java或Python部分将是服务器接受来自其他语言的连接.
一个不那么受欢迎但值得考虑的另一种做RPC的方法是Google protobuffers,它有很好的rpc支持的2/3 .您只需提供传输层即可.没那么多的工作和写作的便利是合理的.
另一个选择是编写一个C包装器,围绕那些需要向Java公开并通过JVM本机插件使用它的Python功能.使用SWIG SWIG可以缓解疼痛 .
基本上在你的情况下,它的工作原理如下:
这个解决方案相当复杂,在大多数情况下有点过分.如果你(出于某种原因)无法负担RPC,那么值得做.但RPC仍然是我的首选.
blu*_*e10 13
许多年后,只是添加一个更受欢迎的选项......
如果你需要CPython功能,py4j是一个不错的选择.py4j已经看到频繁的更新20162017年并且已经获得了一些普及,因为它被例如Apache Spark用于实现CPython互操作性.
最好的解决方案,是使用 Python 程序抛出 REST API。您定义您的服务并调用它们。您可能需要学习一些新模块。但是你会更灵活地应对期货的变化。
这里有一小部分用于此目的的完整模块:Python 模块
Java 模块(用于调用 rest api) Jersey 或 Apache CXF
您将需要一个小的学习曲线,但稍后您将获得更高的生产力和模块化,甚至弹性......
| 归档时间: |
|
| 查看次数: |
65295 次 |
| 最近记录: |