Как связать два отдельных процесса Python? - PullRequest
5 голосов
/ 10 мая 2011

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

Есть ли способ сделать это без использования сокетов?
(например, путем создания некоторой очереди -> ее сериализации -> десериализации другим процессом и выполнения связи; или записи идентификатора файлового процесса, с которым осуществляется связь, а затем создания магической структуры, которая получает идентификатор процесса и отправляет некоторые сообщения этому процессу ... )

Решение должно работать в Linux и Windows.

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Лучшая ставка для вас - ZeroMQ , которая разработана для IPC и чрезвычайно быстра для IPC (также поддерживает протоколы TCP / multicast). Привязки Python действительно хороши, и с ними легко работать. Хорошее введение в ZeroMQ с Python здесь: http://nichol.as/zeromq-an-introduction. Если вы планируете расширить это на несколько машин, AMQP (который является протоколом очереди сообщений) было бы хорошо посмотреть, есть много отличные библиотеки для работы с AMQP для python. Мне очень нравятся комбу и сельдерей . Вы также можете подумать о twisted , который дает вам довольно безумное количество вариантов для общения и хороший цикл событий для загрузки.

1 голос
/ 10 мая 2011

В Linux вы можете использовать именованный канал.http://en.wikipedia.org/wiki/Named_pipe Просто будьте осторожны, пишущая программа / поток будет блокироваться, пока читатель не откроет канал.

Я думаю, что Windows до некоторой степени поддерживает их.

...