GNU Screen 中的 Python 最终会变得空闲,如果 Screen 被解冻



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

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

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

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

我在系统上安装了一个监视工具,发生的情况是某些进程在一定时间后完成并且没有启动新进程。因此,系统在子进程繁忙之前处于活动状态,并在没有更多作业从队列中释放时变为空闲状态。

所以我的问题是,有谁知道任何解释这种行为的原因?

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

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

  1. 尝试将脚本的输出管道传送到: | 开球.txt如果这没有效果,请尝试...
  2. 在另一个 [跃点] 主机上运行屏幕。从那里通过 SSH 连接到您的工作主机。在非模拟外壳中运行脚本。然后随意断开并从您的跃点重新连接以检查该过程。这应该对工作人员隐藏屏幕是否涉及。

请对这些测试的结果发表评论。这将给我更多的时间。

最新更新