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

с PyPubSub:

Pypubsub обеспечивает простой способ для ваше приложение Python для развязки свои компоненты: части вашего приложение может публиковать сообщения (с или без данных) и другие части могут подписаться и получать их. Это позволяет сообщение "отправители" и сообщение "слушатели", чтобы не знать о каждом другое:

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

Это отличный инструмент для реализации архитектура Model-View-Controller или любая подобная архитектура, которая способствует развязке его комплектующие.

кажется, существует довольно много модулей Python для публикации / подписки, плавающих по интернету, от PyPubSub до PyDispatcher к простым" домашним " классам.

существуют ли определенные преимущества и недостатки при сравнении различных модулей? Какие наборы модулей были сопоставлены и сопоставлены?

спасибо заранее

7 ответов


PyDispatcher широко используется в Джанго и он отлично работает для меня (и для всего сообщества Django, я думаю).

насколько я помню, есть некоторые проблемы с производительностью:

  • проверка аргументов PyDispatcher выполняется медленно.
  • неиспользуемые соединения имеют ненужные накладные расходы.

AFAIK очень маловероятно, что вы столкнетесь с этими проблемами в приложении малого и среднего размера. Так эти проблемы могут вас не касаться. Если вы думаете, что вам нужен каждый фунт производительности (преждевременная оптимизация-корень всего зла!), вы можете посмотреть изменения, сделанные в PyDispatcher в Django.

надеюсь, что это помогает.


лучшим пакетом отправки для python, похоже, является модуль отправки внутри django (называется сигналы в документации). Он не зависит от остальной части django и является коротким, документированным, проверенным и очень хорошо написанным.

Edit: Я разветвил этот проект на независимый проект сигнала для Python.


Я недавно внимательно посмотрел на py-amqplib выступать в качестве клиента AMQP для брокера RabbitMQ. Последний инструмент написан на языке Erlang.

Если вы хотите отделить ваши приложения. тогда зачем связывать это с самим языком? Рассмотрите возможность использования очередей сообщений, которые нейтральны к языку, и тогда у вас действительно есть место для роста!

Это, как говорится, AMQP предпринимает усилия, чтобы понять и может быть больше, чем вы готовы взять на себя, если ваше приложение. работает только хорошо. YMMV.


вот более новый: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, особенно шпалеры. Я не знаю, каков их статус на самом деле, но список рассылки довольно активен.

последняя версия шпалеры на PyPi

шпалера док

Я также использовал компоненты из проект Kamaelia Би-би-си. Axon-интересный подход, но более компонентный, чем вдохновленный издателем-потребителем. Ну, его веб-сайт несколько не в курсе... В Google SoC 2008 был проект или 2, и работа ведется.

Не знаю, поможет ли это:)

Edit: я только что нашел Py-notify что такое "неортодоксальный" реализации шаблона Observer. Она имеет большинство функций, которые мне нужны для моих собственных средств.


тот факт, что PyPubSub кажется несколько хаотично управляемым проектом (Вики на SF мертв, веб-сайт (другой Вики), который связан с SF, в настоящее время сломан), был бы достаточной причиной для меня не использовать его. У PyDispatcher есть неповрежденный веб-сайт, но единственная документация, которую они, похоже, предоставляют, - это API, созданный из docstrings. В списке рассылки тоже нет трафика... плохой знак!

Как Майк также упоминал, вполне возможно выбрать решение, не зависящее от Python. Не поймите меня неправильно, я ... --3-->любовь Python, но все же в этом поле имеет смысл использовать фреймворк, который отделен от языка программирования.

У меня нет опыта работы с сообщениями, но я планирую изучить несколько решений. Пока эти два (свободных, с открытым исходным кодом) проекта кажутся наиболее перспективными для меня (по совпадению, оба являются Apache проекты):

оба кажутся разумно созревшими проектами, по крайней мере, в том, что касается документации и сообщества. Я не могу прокомментировать качество программного обеспечения, хотя, как я уже сказал, Я не использовал ни одно из программного обеспечения.

Qpid поставляется с клиентскими библиотеками для Python, но вы также можете использовать py-amqplib. Для ActiveMQ есть pyactivemq, который вы можно использовать для подключения через STOMP (потоковый текстовый протокол обмена сообщениями) или через Openwire.