python-daemon和多处理库之间的区别

时间:2014-07-08 12:25:08

标签: python django multiprocessing daemon xmlrpclib

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

1 个答案:

答案 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()