信号与 pubsub 有何不同?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Blinker 文档 和 PubSub 文档。
就
Blinker
和PubSub
而言,它们是相同的东西。不同之处在于它们的处理方式:使用 Blinker,当您订阅信号时,您会给出信号的名称,而当您激活信号时,您会传递激活对象。
使用
PubSub
,当您订阅侦听器时,您可以提供名称(与Blinker
相同),但是当您通知侦听器时,您可以直接将数据作为关键字参数传递。由于传递数据的关键字参数方法,可以使用PubSub
进行更多的安全检查。就我个人而言,我会选择
Blinker
,因为它更符合我的思维方式,但PubSub
当然也有一席之地。Blinker docs and PubSub docs.
As far as
Blinker
andPubSub
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 asBlinker
), 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 usingPubSub
.Personally, I would go with
Blinker
as it matches my way of thinking better, butPubSub
certainly has a place also.这可能会明确 Pubsub 与信号的关系: http://pubsub.sourceforge.net/apidocs/概念.html
This might clear up exactly how Pubsub relates to signals: http://pubsub.sourceforge.net/apidocs/concepts.html