如何在两个独立的Python进程中通信?

6 投票
2 回答
3816 浏览
提问于 2025-04-16 17:22

我有两个Python程序,我想让它们互相交流。
这两个程序都是系统服务,而且都不是由父进程派生出来的。

有没有什么方法可以在不使用套接字的情况下实现这个?
(比如创建一个队列 -> 序列化它 -> 由另一个进程反序列化并进行通信;或者在文件中写入要进行通信的进程ID,然后创建一个神奇的结构来获取进程ID并向这个进程发送一些消息……)

这个解决方案应该在Linux和Windows上都能工作。

2 个回答

1

在Linux系统中,你可以使用一个叫做“命名管道”的东西。这里有个链接可以了解更多。不过要注意,写入数据的程序或线程会一直等待,直到有读取程序打开这个管道。

我觉得Windows系统在某种程度上也支持这种功能。

5

你可以考虑使用ZeroMQ,它专门为进程间通信(IPC)设计,速度非常快,同时也支持TCP和多播消息。Python的接口非常好用,操作起来很简单。这里有一个关于如何用Python使用ZeroMQ的不错介绍:http://nichol.as/zeromq-an-introduction。如果你打算把这个扩展到多台机器上,AMQP(这是一种消息队列协议)也是个不错的选择,Python中有很多很棒的库可以用来处理AMQP。我个人很喜欢kombucelery。你还可以考虑twisted,它提供了很多通信选项,还有一个很不错的事件循环。

撰写回答