Python3 到 Clojure IPC

Posted

技术标签:

【中文标题】Python3 到 Clojure IPC【英文标题】:Python3 to clojure IPC 【发布时间】:2012-12-18 23:50:02 【问题描述】:

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

还有其他现有的图书馆可以帮助我吗?归根结底,我可以使用 aleph 和原始套接字从头开始编写我自己的服务,但我觉得这样重新发明***太多了。

【问题讨论】:

中途见面-github.com/halgari/clojure-py 【参考方案1】:

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。

【讨论】:

因为我首先有 clojure 的唯一原因是因为数据库的 python 驱动程序还不支持 python3,而 Pyro 是 python2/3 兼容的,我可以放弃 clojure 而只是将 python2.7 代理粘贴在那里。将此标记为向我展示 pyro 的已接受答案:)【参考方案2】:

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

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

最后,Clojure 和 Python 都有 XML-RPC 的库,如果您只是想简单地将 Python 和 Clojure 粘合在一起。

【讨论】:

感谢指向 XML-RPC 的指针!我喜欢 clojure 实现的名称。不幸的是,这不是一个持续的连接,这是另一个要求(忘记提及了,抱歉 =/)。

以上是关于Python3 到 Clojure IPC的主要内容,如果未能解决你的问题,请参考以下文章

Java 到 Clojure 重写

将 java 实例正确绑定到 Vars 的 clojure

如何使用 clojure.test 将值从夹具传递到测试?

JVM上小众语言的苦苦挣扎——Clojure Tutorial 从入门到放弃

Clojure 的 Emacs/Swank/Paredit 教程

Clojure 中的命名空间之间共享函数