如果 Screen 被分离,GNU Screen 中的 Python 最终会变得空闲
Posted
技术标签:
【中文标题】如果 Screen 被分离,GNU Screen 中的 Python 最终会变得空闲【英文标题】:Python inside GNU Screen eventually becomes idle if Screen is dettached 【发布时间】:2011-08-20 23:26:15 【问题描述】:我有一个 python 脚本,它使用多处理和子进程来并行启动多个具有不同参数的外部命令。代码可以在here找到。
为方便起见,我在 GNU Screen 会话中启动此脚本。运行此脚本的机器有 12 个处理器,这些处理器处于空闲状态,直到进程变为活动状态。
每个进程需要几个小时到几天才能运行,因此我经常断开与机器的连接并分离屏幕会话。
但是,最近我注意到了一种我以前从未经历过的行为。有几次我回到机器上发现它空闲时负载为零。如果我通过ps ux
或top
获得活动进程列表,我仍然可以在进程列表中找到脚本(和子进程)。
然后我重新连接屏幕会话以检查程序的状态,并立即将一批新进程发送到队列,系统负载在几秒钟内回到 12。请注意,除了重新附加屏幕会话之外,我对脚本完全没有做任何事情。
我在系统上安装了一个监控工具,结果是某些进程在一定时间后完成并且没有启动新进程。因此,系统一直处于活动状态,直到子进程繁忙,一旦没有更多作业从队列中释放,系统就会变为空闲状态。
所以我的问题是,有人知道解释这种行为的任何原因吗?
编辑:大约一年后,这个问题不再重现,无论是屏幕上的一些补丁还是 python 本身。我接受这个答案,因为它提供了很好的测试方向。
【问题讨论】:
您能告诉我们问题发生时您使用的是什么版本的python和screen,以及您现在使用的问题不再出现的版本吗?我自己也有类似的问题。 抱歉 SpoonMeiser,问题出在很久以前,我没有那个信息了。从那时起,我开始使用 tmux 而不是 screen。至于解决方法,我使用文件日志记录而不是打印到 stdout/stderr。 差不多 十年 之后,我也遇到了完全相同的问题。不要在网上看到其他人有这个问题。还有其他人遇到过这种情况和任何修复吗? 【参考方案1】:我无法解释您所看到的原因。不过,我确实知道您接下来可以尝试什么。
-
尝试将脚本的输出通过管道传输到:|开球.txt
如果这没有效果,请尝试...
在另一个 [hop] 主机上运行屏幕。从那里通过 SSH 连接到您的工作主机。在非仿真 shell 中运行您的脚本。然后随时断开和重新连接从您的跃点以检查该过程。这应该向工作人员隐藏无论如何都涉及到屏幕。
请对这些测试的结果发表评论。这会让我有更多的工作要做。
【讨论】:
我并没有完全按照您在第 2 步中的描述运行,因为我不想停止脚本。相反,我在 hop 主机中启动了一个屏幕,通过 ssh 连接到服务器并将服务器的屏幕附加到其中。然后分离跳屏,将服务器连接在里面。 所有计算现已完成,2 屏幕方法防止了任何其他问题的发生。但是我仍然不明白其背后的原因。因此,我希望人们能够详细说明解释发生了什么的进一步可能性。无论如何,为解决方法+1。 您在第 31 行使用了上下文管理器。我建议在 queue_dispatcher 中也使用它们 dpaste.com/hold/545561 但是,我仍然认为问题出现在 bin/launcher.py 或它正在启动的任何内容中。以上是关于如果 Screen 被分离,GNU Screen 中的 Python 最终会变得空闲的主要内容,如果未能解决你的问题,请参考以下文章