简单的进程间通信

19 投票
3 回答
19324 浏览
提问于 2025-04-16 11:32

我在寻找一种简单的方法,来让一个进程(短暂运行的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 个回答

11

如果你想要一种像socket那样强大的通信方式,可以考虑看看0MQ。它可以根据你两个应用程序的位置使用不同的通信技术,即使是在本地进程之间,它也非常容易使用,并且能为你解决很多问题。

http://zeromq.org

20

其实,进程间通信看起来简单,但实际上有很多复杂的地方。无论别人给你什么简单的答案,记得可能还有很多注意事项没有提到。

说完这些,我认为你可能需要的是消息队列。这是因为你在例子中没有提到IP地址。如果你需要在不同的机器之间通信,那你就需要使用套接字。不过,如果你只是在同一台机器上的进程之间通信,消息队列会更容易理解。

对于Perl来说,一个好的入门点是:
http://perldoc.perl.org/IPC/Msg.html

对于Python,这个链接似乎能解释得很好(可以忽略其他类型的进程间通信,比如信号量):
http://semanchuk.com/philip/sysv_ipc/

3

一般来说,你需要了解的是“套接字”。如果你想获取一些基本的信息,可以去看看IO::Socket::INET的文档,或者更基础的关于套接字的内容,可以参考perldoc perlipc

撰写回答