我有一些用 Python 编写的分析代码。目前我正在使用 Storm 来处理流。因为 Storm 允许使用消息序列化调用 python 代码,所以我在我的 Storm bolts 中从 Java/Scala 调用 Python 代码。
我发现Pykka是演员模型的 Python 实现。我想知道是否有办法从 Akka 演员调用 Python 代码?例如,是否可以将消息从 Akka 演员传递给 Pykka 演员?
我怀疑两个远程参与者模型实现的有线协议是否可以轻松桥接,但您可以在 Scala 代码和 Python 应用程序之间使用0MQ 。Akka 允许消息通过 0MQ 传递,因此经过一些设置后,Scala 代码可以像处理任何其他参与者一样处理 Python 应用程序,尽管我不确定这在 Python 方面意味着什么。
另一个值得考虑的可能性是使用Jython在 JVM 上运行 Python 分析代码。您可以让 Scala 演员调用 Jython 函数/方法。但是,如果您的 Python 代码使用 C 扩展模块,您就必须寻找替代方案。
另一种可能性(也假设您没有使用 C 扩展模块)是尝试使用转换器py2scala;对于数据分析代码,它可能做得不错。据推测,这将为您提供最高效的解决方案。
您还可以使用Jep
嵌入CPython
在 actor JVM 中运行,以完全访问本机 (C)Python
包。
请参阅此处的幻灯片 5 Mixing Python and Java。
如果您需要的 Python 包不是线程安全的,那么可以使用远程Akka
参与者。见https://github.com/alpinedatalabs/alpine-r/blob/35209af47f896450e4f8f8745a80595d01035ca3/server/src/main/resources/application.conf#L4
为了使Scala
toPython
更顺畅 try ScalaPy
- 也建立在Jep
.
从技术上讲,类似的东西也应该适用于 R 使用Renjin
- GPL
,不幸的是,必须小心运行嵌入式。