如果屏幕分离,GNU屏幕内的Python最终会变为空闲

时间:2011-05-08 01:58:36

标签: python subprocess multiprocessing gnu-screen idle-processing

我有一个python脚本,它使用多处理和子进程以不同的参数并行启动多个外部命令。可以找到代码here

为方便起见,我在GNU Screen会话中启动此脚本。运行此脚本的计算机有12个处理器,这些处理器处于空闲状态,直到进程处于活动状态。

每个过程需要几个小时到几天才能运行,因此我经常断开与机器的连接并断开屏幕会话。

然而,最近我注意到了一种我以前从未体验过的行为。有几次我回到机器上,发现零负载是空闲的。如果我通过ps uxtop获得活动进程列表,我仍然可以在进程列表中找到脚本(和子进程)。 然后我重新连接屏幕会话以检查程序的状态,并立即将新的一批进程发送到队列,并且系统的负载在几秒钟内返回到12。请注意,除了重新连接屏幕会话之外,我对脚本完全没有任何作用。

我在系统上安装了一个监控工具,结果是某些流程在一段时间后完成并且没有启动新流程。因此系统处于活动状态,直到子进程忙,并且一旦没有更多的作业从队列中释放就会变为空闲状态。

所以我的问题是,有没有人知道解释这种行为的任何理由?

编辑:大约一年后,这个问题不再可以重现,无论是屏幕上的某个补丁还是python本身。我接受了答案,因为它为测试提供了良好的指导。

1 个答案:

答案 0 :(得分:4)

我无法解释你所看到的原因。但是,我确实知道你接下来可以尝试什么。

  1. 尝试将脚本的输出传递给:| tee out.txt 如果没有效果,请尝试...
  2. 在另一个[hop]主机上运行屏幕。从那里SSH到您的工作主机。在非模拟shell中运行脚本。然后随意断开连接并从您的跃点重新连接以检查该过程。这应该隐藏在屏幕所涉及的工作人员身上。
  3. 请回复这些测试的结果。这会让我继续下去。