Python - 信号如何与pubsub不同?

a p*_*erd 29 python signals publish-subscribe blinker

Django和Flask使用信号 - 后者使用Blinker库.在Python,Blinker和Python pubsub库的上下文中,signalpubsub如何比较?我什么时候使用其中一个?

Eth*_*man 15

布林克文档PubSub的文档.

至于BlinkerPubSub去,它们都是一样的.区别在于它们如何实现:

随着Blinker当你订阅一个信号,你给的信号的名称,当您激活信号传递激活对象.

随着PubSub当您订阅一个听众你给的名字(同Blinker),但是当你通知监听器直接传递数据作为关键字参数.由于传递数据的关键字参数方法,可以使用更多的安全检查PubSub.

就我个人而言,我会Signals更好地与我的思维方式相匹配,但PubSub肯定也有一席之地.


J. *_*lor 5

这可能会清楚地说明Pubsub与信号的关系:http://pubsub.sourceforge.net/apidocs/concepts.html

Pubsub有助于在应用程序中解耦组件(callables,modules,packages).它通过以下方式实现:

  • 允许应用程序的某些部分在不必知道的情况下向"应用程序的其余部分"发送消息
    • 如果消息将被处理:
      • 也许这条消息会完全被忽略,
      • 或由应用程序的许多不同部分处理;
    • 如何处理消息:
      • 将如何处理该消息及其内容;
      • 以什么顺序将任何给定的消息发送到应用程序的其余部分;
  • 允许应用程序的某些部分接收和处理来自"应用程序其余部分"的消息,而无需知道是谁发送了消息.

侦听器是"要接收消息的应用程序的一部分".侦听器订阅一个或多个主题.发件人是应用程序的任何部分,要求Pubsub发送给定主题的消息.发件人提供数据(如果有).Pubsub会将消息(包括任何数据)发送给消息主题的所有侦听器.

  • 这些东西都不适用于信号和接收器吗? (3认同)