在搜索从 Django 应用程序(python)运行 Java 代码的选项后,我发现 Py4J 是我的最佳选择。我尝试了 Jython、JPype 和 Python 子进程,它们中的每一个都有一定的限制:
- 杰通。我的应用程序在 python 中运行。
- JPype 有问题。您可以只启动一次 JVM,然后它无法再次启动。
- Python 子进程。由于常规控制台调用,无法在 Python 和 Java 之间传递 Java 对象。
在 Py4J 网站上写着:
在性能方面,Py4J 的开销比之前的两种解决方案(Jython 和 JPype)都要大,因为它依赖于套接字,但如果性能对您的应用程序至关重要,那么从 Python 程序访问 Java 对象可能不是最好的主意。
在我的应用程序中,性能至关重要,因为我正在使用机器学习框架 Mahout。我的问题是:Mahout 是否也会因为 Py4J 网关服务器而运行得更慢,或者这种开销只是意味着从 Python 函数调用 Java 方法更慢(在后一种情况下,Mahout 的性能不会成为问题,我可以使用 Py4J)。