推荐的Python发布/订阅/分发模块是什么?
来自 PyPubSub 的内容:
Pypubsub 提供了一种简单的方法,让你的 Python 应用程序的各个部分可以独立工作:应用的某些部分可以发布消息(可以带数据,也可以不带),而其他部分可以订阅或接收这些消息。这种方式让消息的“发送者”和“接收者”彼此之间并不需要了解对方:
- 一个部分不需要引入另一个部分
- 发送者不需要知道
- “谁”会收到这些消息,
- 接收者会对数据做什么,
- 甚至不需要知道是否有接收者会收到这些消息。
- 同样,接收者也不需要担心消息来自哪里。
这是一种很好的工具,可以用来实现模型-视图-控制器(Model-View-Controller)架构,或者任何类似的架构,这种架构鼓励各个部分之间的独立性。
网上似乎有很多 Python 模块可以用来发布和订阅消息,从 PyPubSub 到 PyDispatcher,还有一些简单的“自制”类。
在比较不同模块时,有没有具体的优缺点?哪些模块的性能已经被测试和比较过?
提前谢谢你!
7 个回答
这里有一个新的库:https://github.com/shaunduncan/smokesignal。"smokesignal 是一个简单的 Python 库,用于发送和接收信号。它受到 Django 信号框架的一些启发,但它是一个通用的版本。" 示例:
from time import sleep
import smokesignal
@smokesignal.on('debug')
def verbose(val):
print "#", val
def main():
for i in range(100):
if i and i%10==0:
smokesignal.emit('debug', i)
sleep(.1)
main()
对于Python来说,最好的调度包似乎是Django里的一个叫做dispatch模块(在文档中称为signals)。这个模块和Django的其他部分没有依赖关系,内容简洁,文档齐全,经过测试,而且写得非常好。
补充:我把这个项目分支出来,做成了一个独立的信号项目,专门用于Python。
PyDispatcher 在 Django 中被广泛使用,对我来说运行得非常好(我想对整个Django社区来说也是如此)。
我记得有一些性能问题:
- PyDispatcher进行参数检查的时候比较慢。
- 一些未使用的连接会带来不必要的负担。
据我所知,在小到中型的应用程序中,你很可能不会遇到这些问题。所以这些问题可能对你来说并不重要。如果你觉得每一点性能都很重要(过早优化是万恶之源!),你可以看看Django对PyDispatcher所做的修改。
希望这些信息对你有帮助。