如何使用 python 信号在独立进程之间发送消息?
Posted
技术标签:
【中文标题】如何使用 python 信号在独立进程之间发送消息?【英文标题】:How can I use python signals to send messages between independent processes? 【发布时间】:2013-01-17 08:38:53 【问题描述】:我有两种类型的进程。
我希望进程 B
等待来自进程 A
的消息。一旦A
发送消息,进程B
应该处理消息并再次等待。
另外,我将有多个进程实例A
和进程B
。因此,所有B
进程都应该将消息发送给所有A
进程。
我正在查看类似signals
的内容,但附加了一个字符串。
最好的方法是什么?
我知道我可以创建一个pipe
并在while
中继续阅读pipe
,但这似乎无能为力。另外,它不会在阅读后从pipe
中删除吗?
注意:所有进程都不是彼此的子进程。
【问题讨论】:
进程A
和B
如何相互认识?
他们没有。但如果有帮助,我可以让所有 A
进程在某处注册他们的线程 ID。
【参考方案1】:
这就是我最终做的事情......
将生产者进程变成module
并导入消费者。因此,两个进程可以共享变量。
生产者线程将继续生产,消费者线程将继续消费。我正在使用condition
来同步数据,threading.Condition()
。
每个生产者线程:
获取condition
将数据写入全局变量
致电notifyAll()
发布condition
每个消费者线程:
获取condition
等待condition
读取和处理全局变量中的数据
等待condition
...
这只是一个高级视图。在我的例子中,我有不同类型的生产者线程,每个线程都产生不同的数据,并针对特定的消费者群体。所以,我有一个list of condition
。
Reference on condition
【讨论】:
您在问题中说“进程”,但在答案中说“线程”和“threading.Condition()
”。进程和线程具有重要的技术差异。一个进程可以有多个线程。它们都共享进程的地址空间,因此两个线程都可以访问共享模块中的数据。每个进程都有自己的地址空间,因此threading
不会帮助您在进程之间共享数据。【参考方案2】:
我建议将 python 绑定到 ZeroMQ:http://www.zeromq.org/。 pyzmq,也许:https://github.com/zeromq/pyzmq
【讨论】:
以上是关于如何使用 python 信号在独立进程之间发送消息?的主要内容,如果未能解决你的问题,请参考以下文章