我正在寻找一个分布式系统,其中有计算机/工作者机器运行资源丰富的Python 3代码,并且有一个Web服务器为客户端提供Python计算的结果。我非常想在Node.js中编写Web服务器。
我已经研究过使用RPC框架 - 特别是this question引导我ZeroRPC,但它与Python 3不兼容(主要问题是它需要gevent
,这还不是一个接近Python 3的版本)。据我所知,似乎没有另一个可行的Python-Node.js RPC选项。
鉴于此,我愿意使用除RPC之外的其他东西,特别是因为我读过RPC策略隐藏了程序员太多。
如果真的更有意义,我也愿意为Web服务器使用不同的语言;例如,从开发的角度来看,只是将Python用于服务器也可能更简单。
我怎样才能做到这一点?
答案 0 :(得分:2)
你有几个选择。
首先,它听起来像你喜欢ZeroRPC,你唯一的问题是它依赖于gevent
,它还不是3.x-ready。
好吧,gevent
关闭到3.x-ready。人们正在测试甚至使用它的一些分叉,你可以在issue #38上看到。截至2014年9月中旬,似乎获得最大牵引力的是Michal Mazurek's。如果你很幸运,你可以这样做:
pip3 install git+https://github.com/MichalMazurek/gevent
pip3 install ZeroRPC
或者,如果ZeroRPC
的元数据只显示它的Python 2,则可以使用与gevent
相同的方式从其repo安装。
缺点是gevent-3.x forks还没有经过充分的战斗测试,这就是为什么它们都没有被上游接受并且尚未被释放。但是,如果你不是非常匆忙,并且愿意承担风险,那么你很有可能今天开始使用分叉,并在它发布时切换到最终版本,希望在你自己达到1.0之前。
其次,ZeroRPC
肯定不是唯一可用于Python或Node的RPC库。并且它们中的大多数都具有类似的接口,用于通过RPC公开方法。而且,尽管出于可伸缩性或部署原因最终可能需要类似ZeroMQ
的内容,但您可以使用更简单,更广泛的内容,例如基于HTTP的JSON-RPC,它具有十几个或更多Python和Node实现 - 用于早期开发,然后切换到ZeroRPC
。
第三,RPC并不是非常复杂,而且与大多数库所做的方式相比,RPC的绑定方法并不那么难。使其异步可能很棘手,但同样,对于早期开发,您可以使用简单但不可扩展的解决方案 - 为每个请求创建一个线程 - 并在以后切换到其他内容。 (当然,如果您的服务是无状态的,那么解决方案很容易;否则您只是消除所有异步问题并将其替换为竞争条件问题......)
答案 1 :(得分:0)
ZeroMQ提供了几种传输类,而前两种最适合异构RPC层的情况
ZeroMQ有两个系统的端口,因此肯定会满足您的预计需求。