2014-04-02 81 views
3

我有一些用Python編寫的分析代碼。目前我正在使用Storm來處理流。因爲Storm允許使用消息序列化來調用python代碼,所以我在Storm風格的螺栓中調用Java/Scala中的Python代碼。我發現Pykka這是actor模型的Python實現。我想知道是否有辦法從Akka actors中調用Python代碼?例如,是否有可能將來自Akka演員的消息傳遞給Pykka演員?使用Akka actors來調用或傳遞消息給Python代碼

回答

3

我懷疑兩個遠程actor模型實現的線程協議可以很容易地橋接,但是您可以在Scala代碼和Python應用程序之間使用0MQ。 Akka允許message passing over 0MQ,所以經過一些設置之後,Scala代碼可以像其他任何演員一樣處理Python應用程序,但我不確定Python端會有什麼含義。

另一個值得考慮的可能性是使用Jython在JVM上運行Python分析代碼。您可以讓Scala actor調用Jython函數/方法。但是如果你的Python代碼使用C擴展模塊,你必須找到其他選擇。

另一種可能性(假設您沒有使用C擴展模塊)是給轉換器py2scala一個嘗試;對於數據分析代碼來說,它可能做的不錯。想必這會給你最高性能的解決方案。

+0

請您在這裏給出一個詞http://stackoverflow.com/questions/28665037/concurrency-advanced-python-and-interaction-with-different-objects – user3378649

0

您也可以使用Jep在參與者JVM中運行嵌入式CPython以完全訪問本地(C)Python包。

請參見幻燈片5 Mixing Python and Java

如果您需要的Python包不是線程安全的,那麼可以使用遠程Akka參與者。 見https://github.com/alpinedatalabs/alpine-r/blob/35209af47f896450e4f8f8745a80595d01035ca3/server/src/main/resources/application.conf#L4

爲了使ScalaPython平滑嘗試ScalaPy - 也是建立在Jep頂部。

從技術上講,類似的東西也應該適用於R使用Renjin - GPL,不幸的是,所以必須小心運行嵌入式。