Daemonising python项目,使用Twisted

时间:2011-10-20 08:25:00

标签: python twisted daemon

如果我们使用PEP-3143及其参考实施http://pypi.python.org/pypi/python-daemon 然后看起来不可能让Twisted工作,因为在守护进程期间所有可能的文件处理程序都是显式关闭的,其中包括管道。

当Twisted尝试调用os.pipe()然后写入它时 - 获取错误的文件描述符。

在我看来,守护进程不适合这个PEP的联网? 也许这就是扭曲存在的原因

编辑:
我必须指出,问题更多的是“为什么PEP实际上无法创建网络应用程序”,而不是“如何做到”。 Twisted打破了这个规则以便工作

4 个答案:

答案 0 :(得分:2)

它不会关闭所有打开的文件描述符:只是那些不在files_preserve属性中的文件描述符。您可以通过弄清楚Waker的FD和反应堆中所有打开的插座,然后将其传递给files_preserve来强迫它工作......但为什么要这么麻烦?只需使用twistd并自行扭曲守护进程。

更好的是,使用twistd -n并让您的进程受到其他系统工具的监控,并且根本不需要使用守护进程。

答案 1 :(得分:1)

supervisord + upstart

答案 2 :(得分:1)

随意使用此守护程序http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

如何将它与Twisted混合看到这里

http://michael-xiii.blogspot.com/2011/10/twisted.html(警告!俄语文本未来,但Python代码正在证明)

答案 3 :(得分:0)

关闭所有打开的文件描述符的做法是一种影响,即deamonizing进程从父进程继承了一些打开的文件。例如,您可以在一个进程中打开许多文件(例如,使用os.open()),然后调用继承它们的子进程。您可能没有一种简单的方法,作为子进程,从父进程知道哪些文件描述符是有用的(除非您将它与命令行参数一起传递),并且您当然不希望stdin,stdout或stderr,所以在做任何其他事情之前,完全合理地关闭所有打开的文件。

然后,一个deamonizing过程将采取一些额外的步骤,成为一个deamon(如PEP中所述)。

一旦该进程与任何类型的终端完全分离,它就可以根据需要启动打开文件和连接。它将打开其日志文件,配置文件和网络连接。

其他人已经提到过扭曲,通过twistd工具已经很好地完成了这一切,而且你不需要使用额外的模块。如果您不想使用twistd(由于某种原因)但您确实想要使用twisted,您可以使用外部的东西,但是您应该首先将 deamonize 然后导入twisted和其余的应用程序代码和最后打开的网络连接。