1

我在 Python 中编写了一些使用 Java 库的代码,并使用 Jython 对其进行了解释,但它有点慢。我可以在每次启动脚本时以某种方式编译此代码而不是解释它吗?(我读过关于 jythonc 但在新版本的 Jython 中已弃用)

4

1 回答 1

3

Jython、javac 和 jythonc

Jython 总是在启动时编译您的应用程序——即,如果您启动您的应用程序,那么 Python 代码将被编译为 Java VM 字节码;VM 然后执行这个字节码。Jython 和 javac 之间的区别在于 javac 创建包含字节码的 .class 文件,而 Jython 在运行时创建字节码。

jythonc 对 Python 代码的处理与 javac 对 Java 代码的处理相同:它将代码编译为 .class 文件并将其保存到磁盘。在性能方面,这并不比 Jython 的标准行为好,但它使得在其他 JVM 语言中使用/扩展 Jython 代码成为可能。

jythonc 不会以任何方式提高程序的性能。

提高性能

使用分析器来检测代码的热点。探查器将向您显示您的程序花费大部分时间的信息:

NetBeans Profiler 的示例输出显示 Anagrams 的构造函数占用了应用程序运行时间的 70% 以上。

一旦了解了应用程序的热点,您就会知道如何优化其性能。在上面的截图中,应用程序 70% 以上的时间都花在了构造函数 ( <init>) 中。

然后,您可以使用多种技术来提高性能:

  1. 使用更好的算法。如果适用,这对性能的影响最大。

  2. 交易执行时间换取空间。缓存您经常调用的函数的结果,尤其是当它们相对较慢时——例如通过数据库或网络访问检索的数据。

  3. 用较少开销的语言重新实现热点。在您的情况下,您可以在 Java 中重新实现热点并从 Jython 调用它们。

于 2012-07-09T12:46:47.330 回答