Рекомендуемый модуль публикации/подписки/рассылки Python?[закрыто]
-
02-07-2019 - |
Вопрос
От PyPubSub:
PypubSub предоставляет простой способ для вашего приложения Python отделять свои компоненты:Части вашего приложения могут публиковать сообщения (с данными или без данных), а другие части могут подписаться/получать их.Это позволяет сообщению «отправители» и сообщение «слушатели» не знать друг друга:
- одно не нужно импортировать другое
- отправителю не обязательно знать
- "кто" получает сообщения,
- что слушатели будут делать с данными,
- или даже если какой-либо слушатель получит данные сообщения.
- аналогично, слушателям не нужно беспокоиться о том, откуда приходят сообщения.
Это отличный инструмент для реализации архитектуры моделей-контроллера или любой аналогичной архитектуры, которая способствует отделению его компонентов.
Кажется, в сети существует довольно много модулей Python для публикации/подписки, от PyPubSub до PyDispatcher к простым «домашним» занятиям.
Есть ли конкретные преимущества и недостатки при сравнении разных модулей?Какие наборы модулей были протестированы и сравнены?
заранее спасибо
Решение
PyDispatcher активно используется в Джанго и это отлично работает для меня (и, я думаю, для всего сообщества Django).
Насколько я помню, есть некоторые проблемы с производительностью:
- Проверка аргументов, выполняемая PyDispatcher, выполняется медленно.
- Неиспользуемые соединения имеют ненужные накладные расходы.
AFAIK, очень маловероятно, что вы столкнетесь с этими проблемами в приложении малого и среднего размера.Так что эти вопросы могут вас не касаться.Если вы считаете, что вам нужен каждый фунт производительности (преждевременная оптимизация — корень всех зол!), вы можете посмотреть изменения, внесенные в PyDispatcher в Django.
Надеюсь это поможет.
Другие советы
Лучшим пакетом отправки для Python является диспетчерский модуль внутри Джанго (называемого сигналы в документации).Он независим от остальной части django, краток, документирован, протестирован и очень хорошо написан.
Редактировать: Я разветвил этот проект на независимый сигнальный проект для Питона.
Недавно я внимательно посмотрел py-amqplib выступать в качестве клиента AMQP для брокера RabbitMQ.Последний инструмент написан на Erlang.
Если вы хотите отделить свое приложение.тогда зачем связывать это с самим языком?Рассмотрите возможность использования очередей сообщений, которые не зависят от языка, и тогда у вас действительно будет куда расти!
При этом понимание AMQP требует усилий, и это может быть больше, чем вы готовы взять на себя в своем приложении.работает нормально и так.ЮММВ.
Вот более новый: 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()
Некоторые библиотеки, которые я нашел, еще не упоминались:
- Схемы - Легкая, управляемая событиями платформа с мощной компонентной архитектурой.
- Рецепт события C#
Также есть библиотеки PJ Eby, RuleDispatch и проекта PEAK, особенно Trellis.Я не знаю, каков их статус на самом деле, но список рассылки довольно активен.
Последняя версия Trellis на PyPi
Я также использовал компоненты из Камаэлия проект из Би-би-си.Axon — интересный подход, но он скорее компонентный, чем вдохновленный издателем-потребителем.Ну сайт у него вообще какой-то неактуальный...В Google SoC 2008 был один или два проекта, и работа ведется.
Не знаю, поможет ли :)
Редактировать :я только что нашел Py-уведомить который является «неортодоксальной» реализацией шаблона Observer.Он имеет большинство функций, которые мне нужны для моих собственных инструментов.
Тот факт, что PyPubSub кажется несколько хаотично управляемым проектом (Wiki в SF мертв, веб-сайт (еще один Wiki), на который есть ссылка в SF, в настоящее время не работает) был бы для меня достаточной причиной не использовать его.У PyDispatcher есть неповрежденный веб-сайт, но единственная документация, которую они предоставляют, — это документация по API, созданная на основе строк документации.В списке рассылки тоже нет трафика...плохой знак!
Как также упомянул Майк, вполне возможно выбрать решение, независимое от Python.Не поймите меня неправильно, я любовь Python, но все же в этой области может иметь смысл использовать фреймворк, отделенный от языка программирования.
У меня нет опыта работы с сообщениями, но я планирую рассмотреть несколько решений.На данный момент эти два проекта (бесплатные, с открытым исходным кодом) кажутся мне наиболее многообещающими (по совпадению, оба являются проектами Apache):
Оба кажутся достаточно зрелыми проектами, по крайней мере, в том, что касается документации и сообщества.Я не могу комментировать качество программного обеспечения, хотя, как я уже сказал, я не использовал какое-либо программное обеспечение.
Qpid поставляется с клиентскими библиотеками для Python, но вы также можете использовать py-amqplib.Для ActiveMQ есть pyactivemq, который вы можете использовать для подключения либо через STOMP (протокол потокового текстового обмена сообщениями), либо через Openwire.