我已经成长为喜欢erlang,这是一个很好的(咳嗽)建筑适合我的问题。与此同时,我仍然想象我可以克服erlang进程和在python中传递异步消息(我目前正在接受治疗以摆脱这种困扰)。
在最近的狂欢中,我遇到了0MQ&我喜欢它的消息功能。对于erlang / OTP专家来说,这些可能是不言而喻的,但我只是一个不起眼的python程序员(我的收缩无疑会读到这个聪明的论点)。 0MQ user-guide表示它使用本机操作系统线程,而不是虚拟“绿色”线程。
有没有一种方法可以使用eventlet / gevent来使0MQ工作?
或者,我是否应该避开绿眼怪物并坚持使用单个Python应用程序线程,并使用0MQ的消息排队处理非阻塞I / O&它自己(熟练)使用原生线程?
或者,检查康复中心&回到erlang?
答案 0 :(得分:3)
回应陈旧的线索因为我在同一条船上。以为我会分享我的想法。
1:看起来所有繁重的工作都已完成:https://github.com/traviscline/gevent-zeromq已将gevent循环与非阻塞zmq套接字集成,甚至还有一些Cpython加速。它似乎也(在撰写本文时)得到了相当好的维护。
2:这取决于;如果你正在写一些可以使用zmq而没有大量外部事件逻辑的东西,那么你应该只使用zmq。如果OTOH你需要与其他协议集成,你可能想要使用gevent(或者也许扭曲,尽管它现在根本没有可用的zmq)。我的项目通常需要多个协议(即:私有队列管理器,公共http,公共https,私有内存缓存等),所以我正在研究切换到gevent以获得比我目前最喜欢的项目周转更快的方法:twisted。
3:您可能希望完全跳过zmq并与现有的基于erlang的解决方案(如rabbitMQ)集成; zmq的性能优势可能没有您想象的那么重要,然后您有一个erlang消息队列,可以轻松地将python与现有库集成。
答案 1 :(得分:2)
Zero MQ现在可以与Eventlet一起使用:
https://lists.secondlife.com/pipermail/eventletdev/2010-October/000907.html