9

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

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

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

但是,最近我注意到了一种我以前从未经历过的行为。有几次我回到机器上发现它空闲时负载为零。如果我得到一个活动进程列表,ps ux或者top我仍然可以在进程列表中找到脚本(和子进程)。然后我重新连接屏幕会话以检查程序的状态,并立即将一批新进程发送到队列,系统负载在几秒钟内回到 12。请注意,除了重新附加屏幕会话之外,我对脚本没有做任何事情。

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

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

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

4

1 回答 1

4

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

  1. 尝试将脚本的输出通过管道传输到:| tee out.txt 如果没有效果,请尝试...
  2. 在另一个 [hop] 主机上运行 screen。从那里通过 SSH 连接到您的工作主机。在非仿真 shell 中运行您的脚本。然后随时断开连接并重新连接您的跃点以检查该过程。这应该向工人隐藏无论如何都涉及到屏幕。

请评论这些测试的结果。这将给我更多的继续。

于 2011-05-08T02:28:05.217 回答