python-daemon和multiprocessing库的区别

1 投票
1 回答
671 浏览
提问于 2025-04-18 12:29

我需要在一个Python Django模块中运行一个守护进程,这个守护进程会运行一个xmlrpc服务器。主进程会作为一个xmlrpc客户端。我对在Python中创建、启动、停止和终止守护进程有点困惑。我看到有两个库,一个是标准的Python多进程库,另一个是python-daemon(https://pypi.python.org/pypi/python-daemon/1.6),但我不太明白哪个更适合我的情况。此外,我还想知道什么时候以及如何处理SIGTERM信号给我的守护进程。有人能帮我理解这些吗?

1 个回答

2

multiprocessing模块是为了替代线程模块而设计的。它的用途和线程类似,主要是用来加速执行,比如让程序同时在多个核心上运行、进行后台轮询,或者处理其他想要和其他任务同时进行的工作。不过,它并不是用来启动独立的守护进程的,所以我觉得不太适合你的需求。

python-daemon库的目的是将当前运行的Python进程变成一个守护进程。我认为你想要的是在主进程(也就是xmlrpc客户端)中使用subprocess库来启动你的守护进程(xmlrpc服务器),可以使用subprocess.Popen。然后,在守护进程内部,你可以使用python-daemon库来将其变成守护进程。

所以在主进程中,可以写成这样:

subprocess.Popen([my_daemon.py, "-o", "some_option"])

my_daemon.py中:

import daemon
...
def main():
   # Do normal startup stuff

if __name__ == "__main__":
    with daemon.DaemonContext(): # This makes the process a daemon
        main()

撰写回答