30

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

4

2 回答 2

15

Blinker文档PubSub 文档

至于BlinkerPubSub去,他们是一回事。不同之处在于他们如何去做:

Blinker你订阅一个信号时,你给出信号的名称,当你激活信号时,你传递激活对象。

PubSub您订阅一个监听器时,您会给出名称(与 相同Blinker),但是当您通知监听器时,您会直接将数据作为关键字参数传递。由于传递数据的关键字参数方法,可以使用PubSub.

就个人而言,我会选择它,Blinker因为它更符合我的思维方式,但PubSub肯定也有一席之地。

于 2013-02-11T23:30:32.103 回答
6

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

Pubsub 促进了应用程序中组件(可调用对象、模块、包)的解耦。它通过以下方式做到这一点:

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

侦听器是“应用程序中想要接收消息的一部分”。听众订阅一个或多个主题。发送者是应用程序中要求 Pubsub 发送给定主题的消息的任何部分。发送者提供数据,如果有的话。Pubsub 会将消息(包括任何数据)发送给消息主题的所有侦听器。

于 2011-03-07T01:30:38.710 回答