【发布时间】:2010-12-24 00:15:19
【问题描述】:
我知道 Python,但 Jython 是什么?
- 什么时候需要 Jython?
- 有什么缺点?
- 我认为它很慢?
请详细说明!谢谢。
【问题讨论】:
我知道 Python,但 Jython 是什么?
请详细说明!谢谢。
【问题讨论】:
引用Wikipedia:
Jython,JPython 的继承者,是用 Java 编写的 Python 编程语言的实现。
至于它可能有什么用途:
Jython 程序可以无缝地导入和使用任何 Java 类。除了一些标准模块,Jython 程序使用 Java 类而不是 Python 模块。
对 Jython、IronPython 和 CPython 的性能测量表明,在某些大型数据集的情况下,Jython 和 IronPython 的性能都优于 CPython。
【讨论】:
如果您了解 Python 并且已经接受了“pythonic”的做事方式,那么 Jython 允许您将这种哲学带入 JVM 堆栈。如果你这样做,它不仅仅是添加脚本功能。
在我们最新的项目中,所有自定义和业务逻辑都是在 Jython 中构建的,同时我们仍然可以利用一些久经考验的优秀 Java 库,例如 Solr、Jasperreports、Quartz、Jetty、Velocity 等等.
它确实被编译为字节码,但是,正在添加一个额外的层,但与使用 ORM 而不是直接的 JDBC 没有什么不同。
您在生产力方面获得的收益远远超过了性能上的微小损失。
在服务器端,Jython 很少成为瓶颈。对于迷你桌面应用程序,可能会出现问题,但很大程度上取决于您要执行的操作。
最新的 JDK 以及像 Jetty 或 Tomcat 这样的容器都非常成熟和稳定,在许多情况下,在上面添加 Python 可以两全其美。
【讨论】:
我什么时候需要 Jython?
当您想用 Python 编程但需要(或希望)让结果在 Java 虚拟机上运行,或使用现有的 Java 组件时。
有什么缺点。
Jython 可能不是 100% 与 Python 兼容,但任何不兼容都会被视为错误。如果您以后想要/需要在 CPython 上运行,则必须重写任何使用 Java 组件的代码。
我认为它很慢?
与往常一样,这取决于您的特定用例。在某些情况下,它实际上可能比 CPython 更快;当然,这取决于您运行的特定 JVM - 这些都会变得更好。
【讨论】:
另外两个原因:
【讨论】:
Jython 是一个运行在 JVM 之上的 Python 实现。 理论上,Jython 比 CPython 慢一点。
您可以在此处找到一些基准: http://www.smallshire.org.uk/sufficientlysmall/2009/05/22/ironpython-2-0-and-jython-2-5-performance-compared-to-python-2-5/
【讨论】:
我什么时候需要 Jython?
例如,为您的代码添加漂亮的脚本语言。
有什么缺点?
主要缺点是 Jython 落后于官方 CPython 发行版。目前,您可以获得与 Python 2.5.2 兼容的 Jython 版本,而 CPython 为 3.1。
还有一些深奥的模块不受支持。通常,您不会注意到和/或无法轻松找到 Java 替代品。
我认为它很慢?
与什么相比?通常,它要么足够快,要么如果不够快,您可以用大约 1000 行更快的 Java 替换几行 Python。
【讨论】:
我什么时候需要 Jython?
您可以使用 Jython 为 Websphere 应用程序服务器编写管理脚本。这些脚本用于自动执行常见的管理任务并在 Websphere 应用服务器中配置安全性。
WebSphere 利用 JMX API 创建 MBean,这些 MBean 作为内部 WebSphere 对象的 API 公开。由于 Jython 脚本基于 Java 并且它们在 JVM 上运行,它们可以访问这些对象并可以用于配置 WebSphere。
此外,用 Jython 编写代码很有趣,而且您还可以学习一门新语言。
【讨论】:
我什么时候需要 Jython?
我需要 Jython 来测试 JDBC 驱动程序。我在工作中使用的一些应用程序使用 ODBC,一些使用 JDBC。使用 Jython,我可以从一个 Python 源测试两种类型的驱动程序 (为了测试 ODBC,我使用 JDBC-ODBC 桥)。
【讨论】:
JVM 做了一些不错的动态优化,但可能没什么好兴奋的。 JRuby 有时通过优化运行很多的代码路径在 JVM (http://www.engineyard.com/blog/2009/j-is-for-jvm-why-the-j-in-jruby/) 上运行得更快,但那是 Ruby,而不是 Python。
Java 库是主要原因。许多公司都有大量可以用 Python 编写脚本的 Java 代码。您还可以使用 Jython 编写一些开源框架(想到 Struts 和 Eclipse)。
【讨论】:
为了获得良好的速度性能或实现真正的多线程程序,直接从 java (native) 调用 python 脚本是最好的方法。只需准备好你的 python 脚本,然后让 java 完成其余的并发调用到你的 python 脚本中。
【讨论】: