我需要从运行xmlrpc服务器的python django模块运行一个守护进程。主进程将托管xmlrpc客户端。关于在python中创建,启动,停止和终止守护进程,我有点困惑。我见过两个库,标准的python多处理程序,以及另一个python-daemon(https://pypi.python.org/pypi/python-daemon/1.6),但不太了解在我的情况下哪些是有效的。我何时以及如何为守护进程处理SIGTERM?有人可以帮我理解这些吗?
答案 0 :(得分:2)
multiprocessing
模块被设计为线程模块的替代品。它被设计用于您通常使用线程的相同类型的任务;通过针对多个核心运行加速执行,后台轮询以及您希望与其他任务同时运行的任何其他任务。它不是为了启动独立的守护程序进程而设计的,因此我认为它不适合您的用例。
python-daemon
库的目的是" daemonize"当前正在运行的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()