在从Django应用程序(python)中搜索运行Java代码的选项之后,我发现Py4J对我来说是最好的选择.我尝试了Jython,JPype和Python子进程,每个都有一些限制:
> Jython.我的应用程序在python中运行.
> JPype是越野车.您可以在启动JVM之后再次启动JVM.
> Python子进程.由于常规的控制台调用,无法在Python和Java之间传递Java对象.
在Py4J网站上写道:
In terms of performance, Py4J has a bigger overhead than both of the previous solutions (Jython and JPype) because it relies on sockets, but if performance is critical to your application, accessing Java objects from Python programs might not be the best idea.
在我的应用程序中,性能至关重要,因为我正在使用机器学习框架Mahout.我的问题是:由于Py4J网关服务器,Mahout也会运行得更慢,或者这个开销只是意味着从Python函数调用Java方法的速度较慢(在后一种情况下,Mahout的性能不会成为问题,我可以使用Py4J).
解决方法:
我不知道Mahout.但请想一想:至少对于JPype和Py4J,在将类型从Java转换为Python时会产生性能影响,反之亦然.尽量减少语言之间的通话.也许你可以用Java编写一个瘦包装器,将许多Javacall压缩到一个python2java调用.