Django и Flask используют сигналы - последний использует библиотеку Blinker. В контексте Python Blinker и Python pubsub библиотека, как сравнивать сигналы и pubsub? Когда я буду использовать один или другой?
Python - Как сигналы отличаются от pubsub?
Ответ 1
Что касается Blinker
и PubSub
go, это одно и то же. Разница в том, как они идут по этому поводу:
С Blinker
, когда вы подписываетесь на сигнал, вы указываете имя сигнала, а когда вы активируете сигнал, вы передаете активирующий объект.
С PubSub
, когда вы подписываетесь на слушателя, вы указываете имя (то же самое, что и Blinker
), но когда вы уведомляете слушателя, вы передаете данные напрямую в качестве аргументов ключевого слова. Из-за метода аргументов ключевого слова для передачи данных можно использовать еще много проверок безопасности, используя PubSub
.
Лично я бы пошел с Signals
, поскольку он соответствует моему способу мышления лучше, но PubSub
, безусловно, тоже имеет место.
Ответ 2
Это может четко определить, как Pubsub относится к сигналам: http://pubsub.sourceforge.net/apidocs/concepts.html
Pubsub облегчает развязку компонентов (вызывающих, модулей, пакетов) в приложении. Это делает это:
- Предоставление части приложения для отправки сообщений "остальной части приложения" без необходимости знать
- если сообщения будут обработаны:
- возможно, сообщение будет полностью проигнорировано,
- или обрабатывается многими различными частями приложения;
- как будут обрабатываться сообщения:
- что будет сделано с сообщением и его содержимым;
- в каком порядке какое-либо данное сообщение будет отправлено остальной части приложения;
- Разрешить частям приложения получать и обрабатывать сообщения от "остальной части приложения", не зная, кто отправил сообщения.
Слушатель - это "часть приложения, которое хочет получать сообщения". Слушатель подписывается на одну или несколько тем. Отправитель - это любая часть приложения, которое просит Pubsub отправить сообщение определенной темы. Отправитель предоставляет данные, если они есть. Pubsub отправит сообщение, включая любые данные, всем слушателям темы сообщений.