信号与 pubsub 有何不同?

问题描述 投票:0回答:2

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

python signals publish-subscribe blinker
2个回答
16
投票

Blinker 文档PubSub 文档

Blinker
PubSub
而言,它们是同一件事。不同之处在于他们的处理方式:

使用

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

使用

PubSub
订阅侦听器时,您可以提供名称(与
Blinker
相同),但是当您通知侦听器时,您可以直接将数据作为关键字参数传递。由于传递数据的关键字参数方法,可以使用
PubSub
进行更多的安全检查。

就我个人而言,我会选择

Blinker
,因为它更符合我的思维方式,但是
PubSub
当然也有一席之地。


6
投票

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

Pubsub 有助于解耦应用程序内的组件(可调用、模块、包)。它通过以下方式做到这一点:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.