python-daemon和multiprocessing库的区别
我需要在一个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()