простое межпроцессное взаимодействие - PullRequest
19 голосов
/ 09 февраля 2011

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

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

# listener.py

class Listener:
    def __init__(self, port)
        self.port = port

    def on_message(self, msg):
        print "%s: %s" % (timestamp, msg)

recipient = Listener(1234)


# sender.pl

sub send_message {
    my ($msg, $port) = @_;
    # ...
}

send_message("hello world", 1234);

Буду очень признателен за любые указания о том, как решить и / или где это прочитать!

Ответы [ 3 ]

20 голосов
/ 09 февраля 2011

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

Теперь, когда этот отказ от ответственности, я утверждаю, что вам, скорее всего, нужны очереди сообщений.Это основано на том факте, что вы не включили IP-адрес в ваш пример API.Если вам нужно перейти через машины, вам понадобятся сокеты.Однако я думаю, что вам будет проще понять очереди сообщений, если вы справитесь с тем фактом, что это только для связи с процессами на одной машине.

Хорошая отправная точка для perl:
http://perldoc.perl.org/IPC/Msg.html

для python, это, кажется, объясняет (игнорируйте другие типы семафоров типа ipc):
http://semanchuk.com/philip/sysv_ipc/

11 голосов
/ 10 февраля 2011

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

http://zeromq.org

3 голосов
/ 09 февраля 2011

В общем вас интересуют розетки. Хорошим местом для получения только необходимой приблизительной информации является документация IO :: Socket :: INET или более базовых сокетов в perl от perldoc perlipc

...