推荐的Python发布/订阅/分发模块?

时间:2020-03-06 14:32:55  来源:igfitidea点击:

从PyPubSub:

Pypubsub provides a simple way for
  your Python application to decouple
  its components: parts of your
  application can publish messages (with
  or without data) and other parts can
  subscribe/receive them. This allows
  message "senders" and message
  "listeners" to be unaware of each
  other:
  
  
  one doesn't need to import the other
  a sender doesn't need to know   
  
  
  "who" gets the messages,   
  what the listeners will do with the data,   
  or even if any listener will get the message data.
  
  similarly, listeners don't need to worry about where messages come from.
  
  
  This is a great tool for implementing
  a Model-View-Controller architecture
  or any similar architecture that
  promotes decoupling of its components.

从PyPubSub到PyDispatcher到简单的"自制"类,似乎有很多Python模块可以在网上浮动发布/订阅。

比较不同的模块时是否有特定的优点和缺点?对哪些模块进行了基准测试和比较?

提前致谢

解决方案

PyDispatcher在Django中大量使用,并且对我来说非常有效(我想对于整个Django社区)。

我记得有一些性能问题:

  • PyDispatcher进行的参数检查很慢。
  • 未使用的连接会产生不必要的开销。

据我所知,我们不太可能在中小型应用程序中遇到此问题。因此,这些问题可能与我们无关。如果我们认为需要每一个性能(过早的优化是万恶之源!),则可以查看对Django中PyDispatcher所做的修改。

希望这可以帮助。

我最近仔细查看了py-amqplib,以充当RabbitMQ经纪人的AMQP客户端。后者是用Erlang编写的。

如果我们想解除应用程序的耦合。那为什么要把它和语言本身结合起来呢?考虑使用不影响语言的消息队列,那么我们确实有成长的空间!

话虽这么说,AMQP会努力理解,并且可能比我们愿意使用的应用程序要多。一切正常。 YMMV。

还有PJ Eby,RuleDispatch和PEAK项目(特别是Trellis)提供的库。我不知道他们的实际状态,但是邮件列表非常活跃。

PyPi上的网格的最新版本

网格文档

我还使用了BBC Kamaelia项目的组件。 Axon是一种有趣的方法,但是比发布者-消费者的启发更多。好吧,它的网站根本不是最新的……Google SoC 2008中有一个项目或者两个项目正在完成。

不知道是否有帮助:)

编辑:我刚刚发现Py-notify是观察者模式的"非常规"实现。它具有我自己的工具所需的大多数功能。

仅凭PyPubSub似乎是一个混乱管理的项目(SF上的Wiki已死,SF上链接的网站(另一个Wiki)目前已损坏)这一事实足以让我不使用它。
PyDispatcher有一个完整的网站,但是他们似乎提供的唯一文档是从文档字符串生成的API的文档。邮件列表上也没有流量……这是一个不好的信号!

正如Mike提到的那样,完全有可能选择独立于Python的解决方案。现在不要误会我的意思,我爱Python,但是仍然可以在这个领域中使用与编程语言分离的框架。

我没有消息传递方面的经验,但是我打算研究一些解决方案。到目前为止,这两个(免费,开源)项目对我来说似乎是最有前途的(巧合的是,这两个都是Apache项目):

  • ActiveMQ
  • Qpid

两者似乎都是相当成熟的项目,至少在文档和社区方面。我不能对软件的质量发表评论,正如我所说,我没有使用任何软件。

Qpid随附了用于Python的客户端库,但我们也可以使用py-amqplib。对于ActiveMQ,有pyactivemq,我们可以使用它通过STOMP(流文本定向消息协议)或者Openwire进行连接。

我发现的一些库尚未被提及:

  • 电路-具有强大组件架构的轻量级事件驱动框架。
  • C#活动食谱

python最好的调度包似乎是django中的调度模块(在文档中称为信号)。它独立于django的其余部分,并且简短,文档化,经过测试且编写得很好。

编辑:我将该项目分叉为一个独立的Python信号项目。