将使用Twisted的Python项目转为守护进程

4 投票
4 回答
1037 浏览
提问于 2025-04-17 04:41

如果我们使用PEP-3143和它的参考实现http://pypi.python.org/pypi/python-daemon,那么看起来要让Twisted正常工作几乎是不可能的,因为在将程序转为守护进程时,所有可能的文件处理器都会被明确关闭,这其中就包括管道。

当Twisted尝试调用os.pipe()并向其写入数据时,就会出现坏的文件描述符错误。

我认为,根据这个PEP,守护进程的方式并不适合网络应用?这可能也是为什么Twisted会存在的原因。

编辑:
我想强调的是,这个问题更像是“为什么PEP实际上让创建网络应用变得不可能”,而不是“怎么去做”。Twisted为了能够工作,打破了这些规则。

4 个回答

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代码部分还是很有帮助的)

1

supervisord 是一个用来管理和监控程序的工具,它可以确保你的程序在崩溃后自动重启。简单来说,就是一个守护者,帮你看着你的程序,确保它一直在运行。

upstart 也是一个管理程序的工具,主要用于启动和停止系统中的服务。它可以在系统启动时自动运行一些程序,或者在特定条件下启动它们。

把这两个工具放在一起使用,可以让你更好地管理你的程序,确保它们在需要的时候能够自动运行和恢复。

2

它并不会关闭所有打开的文件描述符,只会关闭那些不在files_preserve属性里的文件描述符。你可能可以通过找出唤醒器的文件描述符和反应器中所有打开的套接字,然后把这些传给files_preserve来让它工作……但为什么要这么麻烦呢?直接使用twistd,让twisted自己变成守护进程就好了。

更好的办法是使用twistd -n,让你的进程被其他系统工具监控,根本就不需要去做守护进程的事情。

撰写回答