让python守护进程保持活动状态

让python守护进程保持活动状态,python,daemon,Python,Daemon,我们开发了一些像unix守护进程一样运行的小型服务 我们的第一个实现依赖于扭曲反应堆。reactor实例是我们的工件,用于在子进程调用后保持操作系统进程处于活动状态并不停止运行 最近,我们删除了这些模块的扭曲依赖项,保留了在子流程调用之后保持流程运行的必要性。我们在“main()”方法的末尾放了一个“”while-True:time.sleep(.1)”语句,它工作正常 使用time.sleep(.1)调用,考虑到每分钟约600次的唤醒事件,我们的性能是在浪费性能。这对我们的应用程序性能没有好处

我们开发了一些像unix守护进程一样运行的小型服务

我们的第一个实现依赖于扭曲反应堆。reactor实例是我们的工件,用于在子进程调用后保持操作系统进程处于活动状态并不停止运行

最近,我们删除了这些模块的扭曲依赖项,保留了在
子流程
调用之后保持流程运行的必要性。我们在“main()”方法的末尾放了一个“
”while-True:time.sleep(.1)
”语句,它工作正常

使用
time.sleep(.1)
调用,考虑到每分钟约600次的唤醒事件,我们的性能是在浪费性能。这对我们的应用程序性能没有好处。如果我们更换

while True:
    time.sleep(.1)

它消耗了大量的CPU时间(约为i5的1.7%)

对于以下选项,有更好或平衡的替代解决方案,它们占用更少的CPU时间,并且具有响应性能

reactor.run()


我在stackoverflow和web上找到了一些类似的答案和讨论,但考虑到python,没有找到一个关于它的清晰讨论。

也许解决方案是简单地使用一个模块,这个模块将进入标准库


显然3143被推迟了,但pypi链接到了pep的实现。

我认为睡眠功能实际上不会浪费性能。睡眠导致进程暂停,以便CPU可以同时执行其他任务。然而,如果除了执行你的应用程序之外别无选择,那就没有“浪费”这回事了。睡眠本身没有,但每分钟调用它600次只会导致宇宙的热死亡。我们的应用程序会收到一些基于系统事件的跺脚信息。有时,它会收到大量消息。如果我每分钟只唤醒600次,那么一些消息将被延迟并累积到下一次唤醒事件中。我认为CPU时间每分钟可以有600次以上的效率,给守护进程的时间比我们强制高级函数调用(time.sleep)来控制它的时间要多。这是我的观点之一好!我将在这里尝试并回复行为结果。谢谢supervisord非常适合操作系统级的流程管理。我们的问题是怀疑一些“pythonic”方法在脚本正常执行后不终止脚本,让它在等待系统事件时保持活动状态。
reactor.run()
while True:
    time.sleep(.1)