7

我已经开始喜欢 erlang,它是一个非常适合我的问题的(咳嗽)架构。同时,我仍然喜欢想象我可以在 python 中混合 erlang 进程和异步消息传递(我目前正在接受治疗以摆脱这种痴迷)。

在最近的一次狂欢中,我遇到了 0MQ,我喜欢它的消息传递功能。对于 erlang/OTP 专家来说,这些可能是不言而喻的,但我只是一个不起眼的 Python 程序员(我的缩水者无疑会读到这个聪明的论点)。0MQ用户指南声明它使用本地操作系统线程,而不是虚拟“绿色”线程。

  1. 有没有办法让 0MQ 与说 eventlet/gevent 一起工作?

  2. 或者,我是否应该避免绿眼怪物并坚持使用单个 Python 应用程序线程,由 0MQ 的消息队列处理非阻塞 I/O 以及它自己(熟练)使用本机线程?

  3. 或者,退出康复中心并返回二郎?

4

2 回答 2

3

回应一个陈旧的线程,因为我在同一条船上。以为我会分享我的想法。

1:看起来所有繁重的工作都已经完成了:https ://github.com/traviscline/gevent-zeromq已将 gevent 循环与非阻塞 zmq 套接字甚至一些 Cpython 加速集成。它似乎也(在撰写本文时)维护得相当好。

2:视情况而定;如果您正在编写可以在没有大量外部事件逻辑的情况下使用 zmq 的东西,那么您应该只使用 zmq。如果 OTOH 您需要与其他协议集成,您可能想要使用 gevent(或者可能是扭曲的,尽管它现在根本没有可用的 zmq)。我的项目通常需要多种协议(即:私有队列管理器、公共 http、公共 https、私有 memcache 等),所以我正在研究切换到 gevent 以比我目前最喜欢的项目更快地周转:twisted。

3:您可能希望完全跳过 zmq 并与现有的基于 erlang 的解决方案(如 rabbitMQ)集成;zmq 的性能优势可能并没有你想象的那么重要,然后你就有了一个 erlang 消息队列,可以很容易地与 python 和现有的库集成。

另请参阅:第二人生 wiki 上的消息队列比较

于 2011-04-30T16:01:27.537 回答
2

零 MQ 现在可以与 Eventlet 一起使用:

https://lists.secondlife.com/pipermail/eventletdev/2010-October/000907.html

于 2010-10-25T20:51:45.187 回答