Советы по межпроцессному взаимодействию Python - PullRequest
1 голос
/ 27 ноября 2011

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

Какие были бы мои лучшие варианты для обмена данными между двумя такими программами?

Я думал об использовании сокетов, но это похоже на большую работу.Либо одна программа будет опрашивать соединение всякий раз, когда другая выключена, либо им обоим необходимо иметь возможности сервера / клиента.Я посмотрел на именованные каналы, но не увидел ни одного легкого переносимого решения (нужно запускать на windows и unix).

Ответы [ 3 ]

5 голосов
/ 27 ноября 2011

Каждый из вас может реализовать простой сервер XMLRPC . Каждый из них может затем выполнить код в другом, например, сказать другому, что ему нужно обновить.

3 голосов
/ 27 ноября 2011

Самый простой способ - использовать саму базу данных в качестве средства связи. Добавьте таблицу для регистрации обновлений. Затем любая машина может периодически запрашивать, были ли изменены базовые данные.

Другой простой формой общения является электронная почта с использованием модуля smtplib . Наши сборочные боты и репозиторий контроля версий используют эту форму связи.

Если вам нужно что-то более «промышленное», рассмотрите возможность использования RabbitMQ или что-то подобное для обмена сообщениями между серверами.

1 голос
/ 27 ноября 2011

Я согласен, что сокеты обычно слишком низкого уровня.Если вы исследуете "RabbitMQ", вы должны также исследовать сельдерей .Он может использовать RabbitMQ в качестве бэк-энда, но он также может использовать базу данных и аккуратно инкапсулирует механизм обмена сообщениями.Он также интегрирован с django и gevent.

...