1

我需要从运行 xmlrpc 服务器的 python django 模块运行守护进程。主进程将托管一个 xmlrpc 客户端。我对在 python 中创建、启动、停止和终止守护进程有点困惑。我见过两个库,标准的 python 多处理和另一个 python-daemon ( https://pypi.python.org/pypi/python-daemon/1.6 ),但不太了解在我的情况下哪个有效。另外,我何时以及如何需要为我的守护进程处理 SIGTERM?有人可以帮我理解这些吗?

4

1 回答 1

2

multiprocessing模块被设计为线程模块的直接替代品。它旨在用于您通常使用线程执行的相同类型的任务;通过针对多个内核运行、后台轮询以及您希望与其他任务同时运行的任何其他任务来加速执行。它不是为启动独立的守护进程而设计的,所以我认为它不适合您的用例。

python-daemon库旨在“守护”当前正在运行的 Python 进程。我认为您想要的是使用subprocess主进程(xmlrpc 客户端)中的库来启动您的守护进程(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()
于 2014-07-08T14:21:35.230 回答