2012-12-18 18 views
4

我有一個奇怪的請求。我們需要在我們的python3.3 worker和數據庫之間運行基於clojure的服務。由於這個原因,我正在研究不同的方式來在python和clojure之間進行接口。我看了Thrift,但不幸的是它還沒有python3支持。 0mq看起來也很有趣,但我擔心阻止python3線程的req/req模式(在需要使用此代理服務的多個進程上會有多個線程)。python3 clojure IPC

有沒有其他現有的圖書館可以幫助我在這裏?在一天結束時,我可以使用aleph和原始插口從頭開始編寫我自己的服務,但是我覺得這樣做會重新發明輪子。

+0

見面在中間 - https://github.com/halgari/clojure-py – Kyle

回答

4

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。

+0

由於我在那裏首先有clojure的唯一原因是因爲數據庫的python驅動程序不支持python3, Pyro是python2/3兼容的,我可以放棄clojure,而只是在那裏粘貼一個python2.7代理。將此標記爲顯示pyro的接受答案:) –

2

到目前爲止,我在Python中使用ZeroMQ很開心;還有Clojure的支持,我還沒有真正使用 - 它需要本地庫,這可能有點不方便。即使它不是一個完整的RPC機制,我仍將使用您的ZeroMQ參考,因爲經常將RPC問題簡單地分解爲一個或多個消息隊列上的操作。

同時,也有clojure-py,這將允許你有你的Python並吃掉你的Clojure。它還很年輕,並且沒有粗糙的邊緣,但大部分核心功能都已到位。

最後,如果您只想簡單地將Python和Clojure粘合在一起,那麼始終存在XML-RPC,其中ClojurePython都有庫。

+0

感謝您指向XML-RPC!我喜歡clojure實現的名字。不幸的是,這不是一個連續的連接,這是另一個要求(忘了提及它,對不起=)。 –