我有一個python腳本,它使用多處理和子流程來啓動多個外部命令並行使用不同的參數。代碼可以在here找到。如果屏幕被剝離,GNU屏幕中的Python最終會變爲空閒
爲方便起見,我在GNU屏幕會話中啓動此腳本。運行此腳本的計算機有12個處理器空閒,直到進程激活。
每個進程都需要幾個小時到幾天的時間才能運行,因此我經常斷開與機器的連接並分離屏幕會話。
但是,最近我注意到了一種我從未體驗過的行爲。有幾次,我已經回到機器上,發現空載時零負載。如果通過ps ux
或top
獲得活動進程列表,我仍然可以在進程列表中找到腳本(和子進程)。 然後,我重新掛接屏幕會話以檢查程序的狀態,並立即將一批新進程發送到隊列,系統負載在幾秒鐘內回到12。請注意,除了重新連接屏幕會話之外,我對腳本完全沒有做任何事情。
我已經在系統上安裝了一個監視工具,會發生什麼情況是某些進程在一段時間後完成並且沒有新進程啓動。因此,系統一直處於活動狀態,直到子進程繁忙,並且一旦沒有更多作業從隊列中釋放出來就變爲空閒狀態。
所以我的問題是,有沒有人知道解釋這種行爲的任何理由?
編輯:經過一年左右的時間,這個問題不再是可重現的,無論是在屏幕上的一些補丁或python本身。我接受了答案,因爲它提供了很好的測試方向。
你能告訴我們問題出現時你使用的是什麼版本的python和screen,以及你現在用的是什麼版本,問題不再發生了?我自己有一個非常類似的問題。 – SpoonMeiser 2014-02-24 11:27:21
對不起SpoonMeiser,問題太早了,我再也沒有這些信息了。從那時起我開始使用tmux而不是屏幕。至於解決方法,我使用文件日誌記錄而不是打印到stdout/stderr。 – Unode 2014-02-25 11:40:24