Рекомендуемый модуль публикации/подписки/отправки Python?
От PyPubSub:
Pypubsub предоставляет простой способ ваше приложение Python для развязки его компоненты: части вашего приложение может публиковать сообщения (с или без данных), а другие части могут подписаться/получить их. Это позволяет сообщение "отправители" и сообщение "слушатели" не знают о каждом другой:
- не нужно импортировать другие
- отправителю не нужно знать
- "кто" получает сообщения,
- то, что слушатели будут делать с данными,
- или даже если любой слушатель получит данные сообщения.
- Аналогично, слушателям не нужно беспокоиться о том, откуда приходят сообщения.
Это отличный инструмент для реализации архитектура Model-View-Controller или любой подобной архитектуры, которая способствует развязыванию его компонентов.
Кажется, что существует несколько модулей Python для публикации/подписки, плавающих по сети, от PyPubSub до PyDispatcher до простого "домашние" классы.
Существуют ли особые преимущества и недостатки при сравнении разных модулей? Какие комплекты модулей сравниваются и сравниваются?
Заранее спасибо
Ответы
Ответ 1
PyDispatcher используется в Django и он отлично работает для меня (и для целого сообщества Django, я думаю).
Как я помню, есть некоторые проблемы с производительностью:
- Проверка аргументов, выполненная PyDispatcher, медленная.
- Неиспользуемые соединения имеют ненужные служебные данные.
AFAIK очень маловероятно, что вы столкнетесь с этими проблемами в приложении малого и среднего размера. Таким образом, эти вопросы могут не касаться вас. Если вы считаете, что вам нужен каждый фунт производительности (преждевременная оптимизация - это корень всех злых!), Вы можете посмотреть изменения, внесенные в PyDispatcher в Django.
Надеюсь, что это поможет.
Ответ 2
Лучшим пакетом отправки для python является диспетчерский модуль внутри django (называемый signals в документации). Он не зависит от остальной части django и является коротким, документированным, проверенным и очень хорошо написанным.
Изменить: Я разветкил этот проект на независимый проект сигнала для Python.
Ответ 3
Недавно я внимательно посмотрел на py-amqplib, чтобы действовать как клиент AMQP для брокера RabbitMQ. Последний инструмент написан в Erlang.
Если вы хотите отключить свое приложение. то зачем связывать его с самим языком? Рассмотрите возможность использования очередей сообщений, которые являются нейтральными по языку, и тогда у вас действительно есть место для роста!
При этом AMQP предпринимает усилия для понимания и может быть больше, чем вы готовы принять, если ваше приложение. работает очень хорошо, как есть. YMMV.
Ответ 4
Некоторые найденные библиотеки, о которых еще не упоминалось:
Ответ 5
Вот более новая: 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()
Ответ 6
Существуют также библиотеки PJ Eby, RuleDispatch и проекта PEAK, особенно Trellis. Я не знаю, что их статус на самом деле, но список рассылки довольно активен.
Последняя версия Trellis на PyPi
Trellis doc
Я также использовал компоненты из проекта Kamaelia BBC. Axon - интересный подход, но более важный компонент, чем вдохновляющий издатель-потребитель. Ну, его веб-сайт не совсем обновлен... В Google SoC 2008 был проект или 2, и работа выполняется.
Не знаю, если это поможет:)
Изменить: я только что нашел Py-notify, который является "неортодоксальной" реализацией шаблона Observer. Он имеет большинство функций, которые мне нужны для моих собственных инструментов.
Ответ 7
Тот факт, что PyPubSub кажется несколько хаотично управляемым проектом (Wiki на SF мертв, веб-сайт (другой Wiki), который связан с SF в настоящее время нарушен), было бы достаточным основанием для того, чтобы я не использовал его.
PyDispatcher имеет неповрежденный веб-сайт, но единственная документация, которую они, похоже, предоставляют, - это тот, который используется для API, созданного из docstrings. В списке рассылки нет трафика... плохой знак!
Как отметил Майк, вполне возможно выбрать решение, не зависящее от Python. Теперь не поймите меня неправильно, я люблю Python, но все же, в этом поле может иметь смысл использовать фреймворк, который отделен от языка программирования.
У меня нет опыта обмена сообщениями, но я планирую взглянуть на несколько решений. Пока эти два (бесплатные, с открытым исходным кодом) проекты кажутся наиболее перспективными для меня (по совпадению, оба являются проектами Apache):
Оба кажутся достаточно обоснованными проектами, по крайней мере, далекими от документации и сообщества. Я не могу комментировать качество программного обеспечения, хотя, как я уже сказал, я не использовал какое-либо программное обеспечение.
QIP поставляется с клиентскими библиотеками для Python, но вы также можете использовать py-amqplib. Для ActiveMQ там pyactivemq, который вы можете использовать для подключения через STOMP (Streaming Text Orientated Messaging Protocol) или через Openwire.