4

我有一个奇怪的要求。我们需要在我们的 python3.3 worker 和数据库之间运行基于 clojure 的服务。出于这个原因,我正在研究在 python 和 clojure 之间进行接口的不同方法。我查看了 Thrift,但不幸的是它还没有 python3 支持。0mq 看起来也很有趣,但我担心 req/req 模式会阻塞 python3 线程(多个进程上会有多个线程需要使用此代理服务)。

是否有任何其他现有的图书馆可以帮助我在这里?归根结底,我可以使用 aleph 和原始套接字从头开始编写我自己的服务,但我觉得那样会过多地重新发明轮子。

4

2 回答 2

5

Clojure 表示 JVM。在 JVM 上运行的大多数语言都允许“调用 Java”并被“由 Java 调用”,这基本上意味着 JVM 上的任何其他内容。我从来没有这样做过,但您可能可以从 Jython 调用 Clojure。现在 Jython 不支持 Python 3 语言,但它确实支持 Pyro。

这有点牵强,但您可以尝试:

                                     JVM
     Python-VM             Jython           Clojure
( Your app -> Pyro ) --> ( Pyro -> Proxy -> Your app )

RMI 的参数可能必须转换为 Java 原语和 Java 字符串。它可能还需要一些 ClassLoader-Voodoo。

于 2012-12-19T01:03:50.340 回答
2

到目前为止,我很高兴在 Python 中使用 ZeroMQ。还有 Clojure 支持,我还没有真正使用过——它需要本地库,这可能有点不方便。即使它不是完整的 RPC 机制,我也会使用您的 ZeroMQ 参考,因为通常 RPC 问题可以相当简单地分解为对一个或多个消息队列的操作。

同时,还有clojure-py,它可以让你拥有你的 Python 并吃掉你的 Clojure。它仍然很年轻,并非没有粗糙的边缘,但大多数核心功能已经到位。

最后,ClojurePython都有 XML-RPC 的库,如果你只是想要一些简单的东西将你的 Python 和 Clojure 粘合在一起。

于 2012-12-19T03:15:11.327 回答