我有一个python脚本,它试图与python守护进程通信。调用原始脚本时,它会检查守护程序是否存在。如果守护程序存在,则原始脚本将写入命名管道以与守护程序通信。 如果守护程序不存在,原始脚本将尝试使用DaemonContext创建一个守护程序,然后然后写入命名管道。
原始剧本的伪代码:
from daemon import DaemonContext
if daemon_exists():
pass
else:
with DaemonContext():
create_daemon()
communicate_with_daemon()
问题在于,当创建守护进程时,父进程被终止(即,never_with_daemon将永远不会被执行)。这可以防止原始脚本创建与其通信的守护程序和。
根据this answer,这个问题是python-daemon库的限制。我该如何解决这个问题?
感谢。
答案 0 :(得分:0)
您并不是在描述限制,而是在定义守护进程的工作方式。
[…]父进程被杀死(即永远不会执行communication_with_daemon)。
是的,没错;守护进程与启动它的过程分离。这就是使进程成为守护程序的原因。
但是,此说法不正确:
这可以防止原始脚本创建守护程序并与其进行通信。
还有许多其他方法可以在进程之间进行通信。其通用名称是Inter-Process Communication。解决方案很多,具体选择取决于应用程序的约束。
例如,您可以在已知路径下打开套接字并保存该打开文件;您可以打开网络端口并通过环回接口进行通信;您可以在本地文件系统存储,数据库或其他位置的文件上进行“直接收件箱”通信;等