Python - 信号与 pubsub 有何不同?

Posted

技术标签:

【中文标题】Python - 信号与 pubsub 有何不同?【英文标题】:Python - How are signals different from pubsub? 【发布时间】:2011-07-09 02:38:03 【问题描述】:

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

【问题讨论】:

我有点想从走这条路的人那里寻找明确的答案,例如,“它们是同一件事”或“PubSub 通常涉及 X,而信号通常意味着 Y。” 【参考方案1】:

Blinker docs 和 PubSub docs。

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

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

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

这些东西不也适用于信号和接收器吗?

以上是关于Python - 信号与 pubsub 有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

Python 和 JavaScript 之间的语义有何不同?

return 语句的目的是啥?它与印刷有何不同?

Bigquery Async Job 与 Batch Query 有何不同?

`var[:] = []` 与 `var = []` 有何不同? [复制]

让频道与 Python-socketio 中的房间一致,以及一般的 pubsub 问题

DND和DDM有何不同?