简单的进程间通信

时间:2011-02-09 20:32:34

标签: python perl ipc

我正在寻找一种简单方式将消息从一个进程(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 个答案:

答案 0 :(得分:20)

事实证明,进程间通信虽然表面上很简单,但实际上却充满了复杂性。无论任何人在简单的答案方面告诉你什么,请记住,可能有很多警告没有说明。

现在有了免责声明,我声称您可能想要的是消息队列。这是基于您在示例api中未包含IP地址的事实。如果你需要穿越机器,你会需要套接字。但是,如果您能够处理这个仅用于与同一台机器上的进程通信的事实,我认为您会发现消息队列更容易理解。

perl的一个很好的起点是:
http://perldoc.perl.org/IPC/Msg.html

对于python,这似乎解释了(忽略其他类型的ipc,如信号量):
http://semanchuk.com/philip/sysv_ipc/

答案 1 :(得分:11)

对于与socket相同风格的通电通信,请考虑查看0MQ。它可以根据您的两个应用程序的位置使用不同的通信技术,甚至对于本地进程,它也非常易于使用并为您解决问题。

http://zeromq.org

答案 2 :(得分:3)

一般来说,您对插座感兴趣。获取所需粗略信息的好地方是来自IO::Socket::INET

的perl perldoc perlipc或更多基本套接字内容的文档