从python调用java代码

从python调用java代码,java,python,performance,opennlp,Java,Python,Performance,Opennlp,我正在一个python项目中尝试优化一些自然语言处理的性能。基本上,我希望将计算密集型部分外包给使用ApacheOpenNLP的公司,它是用Java编写的 我的问题是将Java函数/类链接回python代码的推荐方法是什么?我想到的三个主要方法是 在python中使用C/C++绑定,然后在我的C程序中嵌入JVM。这就是我所倾向的,因为我对编写python的C扩展有点熟悉,但是使用一个三角形的语言,其中C只起中介作用,似乎不太正确 使用Jython。我主要担心的是,据我所知,CPython是非常

我正在一个python项目中尝试优化一些自然语言处理的性能。基本上,我希望将计算密集型部分外包给使用ApacheOpenNLP的公司,它是用Java编写的

我的问题是将Java函数/类链接回python代码的推荐方法是什么?我想到的三个主要方法是

  • 在python中使用C/C++绑定,然后在我的C程序中嵌入JVM。这就是我所倾向的,因为我对编写python的C扩展有点熟悉,但是使用一个三角形的语言,其中C只起中介作用,似乎不太正确

  • 使用Jython。我主要担心的是,据我所知,CPython是非常流行的python实现,我不想破坏与其他协作者或包的兼容性

  • 对OpenNLP附带的二进制文件进行流式输入和输出。Apache提供了令牌化器和独立二进制文件,您可以通过管道将数据传输到其中或从中传输出去。这可能是最容易实现的选择,但似乎也是最粗糙的选择

我想知道有python和java接口经验的人是否知道这些选项之间的性能可能会有多大差异,在这种情况下,哪一个是“推荐”的或被认为是最佳实践——或者当然,是否有一种我没有想到的完全不同的方法

我确实搜索了现有的答案并找到了,但这是3.5年前的答案,并提到了一些项目要么已经死了,难以集成/配置/安装,要么仍在开发中

一些评论提到,与运行实际NLP代码所需的时间相比,这三种方法的开销可能微不足道。这可能是真的,但我仍然对从更普遍的角度来看答案感兴趣


谢谢

考虑使用现有的独立于语言的RPC mecahnism(thirift,…)构建java服务器。并使用python作为RPC客户端与服务器进行对话。它具有松散耦合。

嗯,我认为绑定的性能在这里并不重要。。。大部分时间都会花在OepnNLP自己身上,对吧?我不知道-你告诉我:一件事要考虑的是代码当前的方式,我经常调用OpenNLP来一次处理小的文本块,所以我认为优化绑定可能是重要的。(虽然从理论上讲,重组我现有的代码以减少调用的发生当然是可能的。)我也只是好奇这种场景的“最佳实践”是什么,在这种情况下,你会告诉我;)如果块很小并且处理得很快,那么是的,“跨语言调用”的开销这确实是一件需要考虑的事情。调用庞大的Java优化性能听起来有点矛盾。但是让我们知道你的结果。