Daemoning python项目,使用Twisted

Daemoning python项目,使用Twisted,python,twisted,daemon,Python,Twisted,Daemon,如果我们使用PEP-3143及其参考实现 然后,Twisted看起来不可能工作,因为在后台监控期间,所有可能的文件处理程序都显式关闭,其中包括管道 当Twisted尝试调用os.pipe()然后对其进行写入时,会得到错误的文件描述符 在我看来,Daemoning不适合这个PEP进行联网? 也许这就是扭曲存在的原因 编辑: 我必须指出,问题更多的是“为什么PEP有效地使创建网络应用程序变得不可能”,而不是“如何做”。 Twisted为了工作而打破此规则它不会关闭所有打开的文件描述符:只关闭那些不在

如果我们使用PEP-3143及其参考实现 然后,Twisted看起来不可能工作,因为在后台监控期间,所有可能的文件处理程序都显式关闭,其中包括管道

当Twisted尝试调用
os.pipe()
然后对其进行写入时,会得到错误的文件描述符

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

编辑:
我必须指出,问题更多的是“为什么PEP有效地使创建网络应用程序变得不可能”,而不是“如何做”。 Twisted为了工作而打破此规则

它不会关闭所有打开的文件描述符:只关闭那些不在
文件\u preserve
属性中的描述符。您可以通过计算唤醒器的FD和反应器中所有打开的套接字,然后将其传递给
文件\u preserve
,来强制此工作。。。但是为什么要麻烦呢?只需使用
twistd
并将其自身进行twisted守护

更好的方法是,使用
twistd-n
,让您的流程由其他系统工具监控,而不必担心后台监控。

supervisord
+
upstart

请随意使用此守护程序

如何将其与Twisted混合,请参见此处


(警告!前面有俄文文本,但Python代码正在演示)

关闭所有打开的文件描述符的做法可能会导致取消监视进程从父进程继承一些打开的文件。例如,您可以在一个进程中打开几十个文件(例如使用
os.open()
),或者调用继承这些文件的子进程。作为子进程,您可能没有一种简单的方法可以从父进程了解哪些文件描述符是有用的(除非您将其与命令行参数一起传递),而且您肯定不需要stdin、stdout或stderr,因此在执行任何其他操作之前,关闭所有打开的文件是完全合理的

然后,脱盟过程将采取一些额外的步骤成为执事(如政治公众人物中所述)

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


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

我自己不是Twisted专家,但我注意到人们使用Twisted(我猜是它的一些开发人员)在freenode.netw上频繁使用#python IRC通道为什么不使用Twisted的Daemoning功能?waker调用os.pipe(),它会弹出一个新的连接对,如(9,10)。好的,我会包括在内。如果twisted需要更多管道怎么办?Twistd不遵守PEP制定的规则,这就是为什么它有效。我试图让我的头脑明白这样一个事实,即PEP有效地使创建网络应用程序变得不可能