【问题标题】:How to avoid python-daemon limitations?如何避免 python-daemon 限制?
【发布时间】:2018-03-27 18:24:28
【问题描述】:

我有一个尝试与 python 守护进程通信的 python 脚本。当调用原始脚本时,它会检查守护进程是否存在。如果守护进程存在,原始脚本将写入命名管道以与守护进程通信。 如果守护进程不存在,原始脚本会尝试使用 DaemonContext 创建守护进程,然后写入命名管道。

原脚本伪代码:

from daemon import DaemonContext

if daemon_exists():
    pass
else:
    with DaemonContext():
        create_daemon()

communicate_with_daemon()

问题是当守护进程被创建时,父进程被杀死(即,communication_with_daemon 永远不会被执行)。这可以防止原始脚本创建守护程序与其通信。

根据this answer,这个问题是python-daemon库的限制。我该如何解决这个问题?

谢谢。

【问题讨论】:

  • 守护进程是双重分叉和关闭与终端的连接。你可以自己实现它,但我不推荐它。为什么不编写一个单独的客户端进程来处理守护进程通信?
  • 是的,这似乎是避免该问题的最明智的方法。谢谢!
  • @Keozon 你能发表你的评论作为答案吗?谢谢!

标签: python daemon python-daemon


【解决方案1】:

您描述的不是限制,而是对守护进程如何工作的定义。

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

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

但是,这种说法是不正确的:

这会阻止原始脚本创建守护进程并与之通信。

还有许多其他方式可以在进程之间进行通信。它的通用名称是Inter-Process Communication。解决方案很多,您选择哪种取决于您的应用程序的限制。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-21
    • 2014-09-11
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多