【问题标题】:Python egg that makes Java calls to a running Java application对正在运行的 Java 应用程序进行 Java 调用的 Python egg
【发布时间】:2013-02-12 13:51:46
【问题描述】:

我正在为 Oracle NoSQL 数据库的 Python 适配器提出建议。 Oracle NoSQL 数据库作为独立的 Java 应用程序运行,至少在 Java 程序中,您可以通过告诉程序要连接的主机名和端口以及一些配置设置来与它交互。然后,您对包含该配置的“kvstore”对象进行 java 调用。

我想创建一个 Python 库,它基本上公开了 Oracle NoSQL 拥有的 Java 方法的 Python 版本,并将这些方法转换为 Java 以与正在运行的 Oracle NoSQL 应用程序对话,但我不确定哪种技术最好能够做到这一点。

有人知道我想使用什么技术吗?我宁愿不使用 Jython(这样应用程序可以在标准 Python 环境中运行)或 JNI(因为它似乎有一些讨厌的警告。)

编辑:到目前为止,我发现的唯一潜在技术是:Jpype 对我有用吗?

此外,以下是图书馆的理想要求。如果其中一个确实最符合这些要求,我会考虑使用 Jython 或 JNI。

  1. 性能。 Oracle NoSQL 的主要优势是性能和可扩展性,因此这将是适配器最重要的组件。

  2. 易于为 Python 用户实现。为了让 Python 程序员真正使用该库,他们必须以一种自然的方式相对容易地使用它。

  3. 可靠性。它需要能够可靠且无错误,同时在您自然期望 Python 可以使用的平台上工作。 (这就是让我担心 JNI 的原因。听起来它的实现依赖于平台,并且容易出错。)

  4. 发展速度。最后一点很重要,它的开发速度相对较快。开发人员团队会喜欢学习 Python 或 C,但我们现在比任何其他编程语言都更了解 Java。

【问题讨论】:

  • 对协议进行逆向工程并编写驱动程序,也许?你已经消除了我自然会想到的途径。 CPython + JNI、Jython 或 posix 套接字...
  • 如果您列出了您正在寻找的标准,这将有所帮助。 (看起来你已经“可以在标准的 Python 环境中运行了。)
  • @Dwerner 我很高兴听到这些不同选项的好处。我现在列出了标准。我可能不应该从一开始就试图彻底否定 Jython 或 JNI —— 更多的是它是否符合标准。

标签: java python jpype


【解决方案1】:

我已经尝试按顺序回答每一点,并附上相关的注释。

  1. 性能:我认为 JNI 将是这里的赢家,但我可能错了,因为 Jython 也可以进行 JIT。

  2. 易于实施:我认为这是因为您的意思是易于使用该库?这完全取决于您如何构建 API、1 对 1 方法调用、对象句柄等。

  3. 可靠性:Jython 显然是这里的赢家,因为当您仅实例化 POJO/直接在客户端代码中直接访问 API 时,没有出错的余地。

  4. 开发速度:JNI 可能非常乏味。您实际上是在学习 CPython 模块、C、Python 扩展、JNI,然后引用现有的用 Java 构建的 API。

总而言之,如果您能实现跳跃,我认为您在短期内嵌入 Jython 会获得更多好处,主要是因为您可以直接操作 API。我亲自将 IronPython 嵌入到 .NET 代码库中并取得了很好的成功。是的,您会失去本机速度,但是很难用工作 JNI 桥所需的 C 编码量来证明这种权衡是合理的。也就是说,您很可能会找到像您列出的项目 (Jpype) 那样可以为您完成大部分工作的项目。

我想问的是,我需要本地 CPython 运行时的哪些特性,而您在使用 Jython 时会丢失这些特性。您现有的 CPython 代码库是否严重依赖 CPython 原生功能?

无论如何,我正在尝试回答。

【讨论】:

  • 关于 2,这主要是我的意思。我也不确定 Python 开发人员使用 Jython 而不是 CPython 有多大的不同。这会让很多 Python 开发人员放弃使用适配器的想法,因为他们不想让程序只与 Jython 兼容,还是没什么大不了的?
  • Jython 和 IronPython 在语法意义上是 Python,但它们在实际使用中往往与 CPython 略有不同,因为在每种环境中使用的 API 与 CPython 非常不同。也就是说,如果您非常依赖 Java 类库或 .NET。您可以创建一个易于使用 JNI 使用的 API,但它仍然归结为品味/实用主义的平衡。如果您需要与用 CPython 编写的重要代码库集成,您可能会发现在那里公开 API 是值得的。如果它是一个新应用程序,或者只是对现有应用程序的扩展,我会投票支持更简单的解决方案
  • 更简单的解决方案 == Jython,到目前为止。
猜你喜欢
  • 2010-10-02
  • 2016-04-23
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 2013-01-20
  • 1970-01-01
  • 2017-12-03
相关资源
最近更新 更多