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

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

От PyPubSub:

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Надеюсь, что это поможет.

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

  • Circuits - легкая, управляемая событиями платформа с сильной Component Architecture.
  • С# Event Recipe

Ответ 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.