信号与 pubsub 有何不同?

发布于 2024-10-20 03:20:14 字数 319 浏览 8 评论 0原文

Django 和 Flask 使用信号 - 后者使用 Blinker 库。在 Python 环境中,Blinker 和 Python pubsub 库,信号和 pubsub 比较如何?我什么时候会使用其中之一?

Django and Flask make use of signals — the latter uses the Blinker library. In the context of Python, Blinker and the Python pubsub library, how do signals and pubsub compare? When would I use one or the other?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海夕 2024-10-27 03:20:14

Blinker 文档PubSub 文档

BlinkerPubSub 而言,它们是相同的东西。不同之处在于它们的处理方式:

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

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

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

Blinker docs and PubSub docs.

As far as Blinker and PubSub go, they are the same thing. The difference is in how they go about it:

With Blinker when you subscribe to a signal you give the name of the signal, and when you activate the signal you pass the activating object.

With PubSub when you subscribe to a listener you give the name (same as Blinker), but when you notify the listener you pass the data directly as keyword arguments. Because of the keyword argument method of passing data, it is possible to have many more safety checks using PubSub.

Personally, I would go with Blinker as it matches my way of thinking better, but PubSub certainly has a place also.

始终不够 2024-10-27 03:20:14

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

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

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

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

This might clear up exactly how Pubsub relates to signals: http://pubsub.sourceforge.net/apidocs/concepts.html

Pubsub facilitates the decoupling of components (callables, modules, packages) within an application. It does this by:

  • Allowing parts of the application to send messages to “the rest of the application” without having to know
    • if the messages will be handled:
      • perhaps the message will be ignored completely,
      • or handled by a many different parts of the application;
    • how the messages will be handled:
      • what will be done with the message and its contents;
      • in what order any given message will be sent to the rest of the application;
  • Allowing parts of the application to receive and handle messages from “the rest of the application” without having to know who sent the messages.

A listener is “a part of the application that wants to receive messages”. A listener subscribes to one or more topics. A sender is any part of the application that asks Pubsub to send a message of a given topic. The sender provides data, if any. Pubsub will send the message, including any data, to all listeners of the message’s topic.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文