Подтвердить что ты не робот

Python - Как сигналы отличаются от pubsub?

Django и Flask используют сигналы - последний использует библиотеку Blinker. В контексте Python Blinker и Python pubsub библиотека, как сравнивать сигналы и pubsub? Когда я буду использовать один или другой?

4b9b3361

Ответ 1

Blinker docs и PubSub docs.

Что касается Blinker и PubSub go, это одно и то же. Разница в том, как они идут по этому поводу:

С Blinker, когда вы подписываетесь на сигнал, вы указываете имя сигнала, а когда вы активируете сигнал, вы передаете активирующий объект.

С PubSub, когда вы подписываетесь на слушателя, вы указываете имя (то же самое, что и Blinker), но когда вы уведомляете слушателя, вы передаете данные напрямую в качестве аргументов ключевого слова. Из-за метода аргументов ключевого слова для передачи данных можно использовать еще много проверок безопасности, используя PubSub.

Лично я бы пошел с Signals, поскольку он соответствует моему способу мышления лучше, но PubSub, безусловно, тоже имеет место.

Ответ 2

Это может четко определить, как Pubsub относится к сигналам: http://pubsub.sourceforge.net/apidocs/concepts.html

Pubsub облегчает развязку компонентов (вызывающих, модулей, пакетов) в приложении. Это делает это:

  • Предоставление части приложения для отправки сообщений "остальной части приложения" без необходимости знать
    • если сообщения будут обработаны:
      • возможно, сообщение будет полностью проигнорировано,
      • или обрабатывается многими различными частями приложения;
    • как будут обрабатываться сообщения:
      • что будет сделано с сообщением и его содержимым;
      • в каком порядке какое-либо данное сообщение будет отправлено остальной части приложения;
  • Разрешить частям приложения получать и обрабатывать сообщения от "остальной части приложения", не зная, кто отправил сообщения.

Слушатель - это "часть приложения, которое хочет получать сообщения". Слушатель подписывается на одну или несколько тем. Отправитель - это любая часть приложения, которое просит Pubsub отправить сообщение определенной темы. Отправитель предоставляет данные, если они есть. Pubsub отправит сообщение, включая любые данные, всем слушателям темы сообщений.