从Python运行Java jar文件的最快方法?

时间:2012-03-17 17:48:42

标签: java python performance optimization

这是我的问题。我有一个现有的.jar文件,我必须在我的程序中使用。然而,该程序是用Python编写的。

由于我的程序需要很长时间才能运行(大型开发语料库中的命名实体标记器),因此我使用cProfiler对其进行了分析,并使用line_profiler对其进行了排序。似乎92%的时间花在这项任务上。

我目前正在使用以下代码:

import subprocess as sub
sub.call(["java", "-jar", "-Xmx512m", "MyFile.jar", 
         featuresFileName, numIterations, featureCutOff])

我在某处读过有关子进程与Popen和其他零碎的内容,但找不到一个不需要子进程或os调用的好解决方案(当然,可能没有)。

我真的很感激有关从Python脚本中运行.jar文件的最快方法的一些建议。但请注意,我无法修改Java代码,也无权与该代码的开发人员交谈。

或者,我不知道这是否会有所帮助,或者我是否只是在这里抓住吸管,但是也许有一种方法可以在后面的sub.call()中调用该过程,以某种方式保持JVM运行(?),以便我可以简单地调用jar文件。也许这有助于降低启动成本? BTW我是一个全新的Java新手(主要是C ++,C#,Python体验)所以我的问题没有任何意义 - 我提前道歉......

4 个答案:

答案 0 :(得分:3)

您可以尝试将Python移植到Jython,然后在同一个JVM中本地运行它(可能会也可能不起作用)。这样你就可以实现零启动时间,并且JVM有足够的时间利用其JIT随着时间的推移为理想情况提供更好的整体性能。

答案 1 :(得分:1)

这表明大部分时间都花在了这个过程中。它可能不是启动时间的问题。一旦它开始,它可能就是它所做的。

我能想到的唯一方法是在后台运行该进程,如果这是一个选项,可以同时多次运行。 (同时而不是一个接一个地运行)

答案 2 :(得分:1)

尝试使用“-client”选项。它应该减少JVM启动时间。

答案 3 :(得分:0)

通过分析jar文件的清单文件,您可以找到所使用的jar文件的类名。那么你原则上可以编写自己的小型java守护进程,它正在侦听新的参数,并调用相应类的main()函数。但只有在启动成本成为问题的情况下才值得付出努力。