Рекомендуемый модуль публикации/подписки/рассылки Python?[закрыто]

StackOverflow https://stackoverflow.com/questions/115844

Вопрос

От 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()

Некоторые библиотеки, которые я нашел, еще не упоминались:

Также есть библиотеки 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top