如何避免python-daemon限制?

时间:2018-03-27 18:24:28

标签: python daemon python-daemon

我有一个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库的限制。我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

您并不是在描述限制,而是在定义守护进程的工作方式。

  

[…]父进程被杀死(即永远不会执行communication_with_daemon)。

是的,没错;守护进程与启动它的过程分离。这就是使进程成为守护程序的原因。

但是,此说法不正确:

  

这可以防止原始脚本创建守护程序并与其进行通信。

还有许多其他方法可以在进程之间进行通信。其通用名称是Inter-Process Communication。解决方案很多,具体选择取决于应用程序的约束。

例如,您可以在已知路径下打开套接字并保存该打开文件;您可以打开网络端口并通过环回接口进行通信;您可以在本地文件系统存储,数据库或其他位置的文件上进行“直接收件箱”通信;等