在python中连接两个守护进程

Posted

技术标签:

【中文标题】在python中连接两个守护进程【英文标题】:Connect two daemons in python 【发布时间】:2012-06-25 17:54:31 【问题描述】:

在 Python 中连接两个守护进程的最佳方法是什么?

我有守护进程 A 和 B。我想在 A 的模块中接收 B 生成的数据(可能是双向的)。两个守护进程都支持插件,所以我想关闭插件中的通信。最好的跨平台方法是什么?

我知道一些低级解决方案的机制 - 共享内存 (C/C++)、linux 管道、套接字 (TCP/UDP) 等,以及一些高级 - 队列(JMS、Rabbit)、RPC。

两个守护进程应该在同一主机上运行,​​但显然更好的方法是从连接类型中抽象出来。

python 中典型的解决方案/库是什么?我正在寻找一个优雅而轻量级的解决方案。我不需要外部服务器,只需要两个进程相互通信。

我应该在 python 中使用什么来做到这一点?

【问题讨论】:

消息队列很可能是最优雅的解决方案。 嗯作为消息队列我了解 RabbitMQ/JMS 等。我想避免使用外部的第三个守护进程/服务器来处理整个通信。除了沟通会非常激烈,所以即使队列是最优雅的方式,我认为更简单的方式可能会更好。 我会说 dbus,但现在有 windows 版本的 dbus。 不幸的是,Windows 也是我的目标。 subproccess.Popen()communicate() 一起用于您的目的时可以工作吗?类似于从包含子进程的整个程序中生成带有 args 的程序等,并通过整个程序相互通信? 【参考方案1】:

我不确定您的流量有多大,但我会推荐asyncore 包。它使用起来相当简单,它基于套接字。

我很久以前就用这个做了一个命令模式。有兴趣我可以把代码挖出来。

【讨论】:

【参考方案2】:

您可以使用套接字进行进程通信:http://docs.python.org/howto/sockets.html

远程过程调用也适合:Python XML RPC http://docs.python.org/library/xmlrpclib.html 或 Google Protobuf http://code.google.com/p/protobuf/ https://developers.google.com/protocol-buffers/docs/pythontutorial

【讨论】:

以上是关于在python中连接两个守护进程的主要内容,如果未能解决你的问题,请参考以下文章

python下编写守护进程

Python编写守护进程程序

python之守护进程

登录ubuntu之前如何在python守护进程中使用DBUS

mod_wsgi 无法连接 WSGI 守护进程

Supervisor-守护进程工具