Java Python集成

2024-04-26 14:36:14 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

很多年后,为了增加一个现在比较流行的选项。。。

如果您需要CPython功能,py4j是一个不错的选择。py4j在2016年和2018年都有频繁的更新,并获得了一定的欢迎,因为它被ApacheSpark用来实现CPython interoperability

为什么不使用Jython?我能马上想到的唯一缺点是如果您的库使用CPython本机扩展。

编辑:如果您现在可以使用Jython但认为您可能对库的更高版本有问题,我建议您尝试将库与应用程序隔离(例如某种适配器接口)。用目前最简单的方法,然后在需要的时候考虑JNI/CPython/etc。走(痛苦的)JNI路线没有什么好处,除非你真的必须这样做。

坦率地说,大多数直接从JVM中运行Python的方法都不起作用。它们要么不太兼容(第三方库的新版本可以使用Python2.6特性,不能与Jython2.5一起使用),要么是hacky(它将打破神秘的JVM stacktrace,而不是真正的解决方案)。

我更喜欢的集成两者的方法是使用RPC。XML RPC如果数据量适中,那么这里的选择也不错。它得到了很好的支持——Python在其标准库中有它。Java库也很容易找到。现在,根据您的设置,Java或Python部分将是一个接受其他语言连接的服务器。

一种不太流行但值得考虑的rpc替代方法是Google protobuffers,它支持nice rpc的2/3。你只需要提供你的传输层。没有那么多的工作和方便的写作是合理的。

另一种选择是围绕那些需要向Java公开并通过JVM本地插件使用的Python功能编写一个C包装器。你可以用刷牙来减轻疼痛。

基本上你的情况是这样的:

    < L>为java到C++的所有方法调用创建一个Sigg接口。
  1. 创建C/C++代码,接收内部调用,并在内部调用Python解释器和右PARAMS。
  2. 转换从python得到的响应并通过swig将其发送回Java代码。

这个解决方案相当复杂,在大多数情况下有点过火。但如果你(出于某种原因)买不起rpc,还是值得做的。不过,RPC仍然是我的首选。

相关问题 更多 >