8

我有一個python腳本,它使用多處理和子流程來啓動多個外部命令並行使用不同的參數。代碼可以在here找到。如果屏幕被剝離,GNU屏幕中的Python最終會變爲空閒

爲方便起見,我在GNU屏幕會話中啓動此腳本。運行此腳本的計算機有12個處理器空閒,直到進程激活。

每個進程都需要幾個小時到幾天的時間才能運行,因此我經常斷開與機器的連接並分離屏幕會話。

但是,最近我注意到了一種我從未體驗過的行爲。有幾次,我已經回到機器上,發現空載時零負載。如果通過ps uxtop獲得活動進程列表,我仍然可以在進程列表中找到腳本(和子進程)。 然後,我重新掛接屏幕會話以檢查程序的狀態,並立即將一批新進程發送到隊列,系統負載在幾秒鐘內回到12。請注意,除了重新連接屏幕會話之外,我對腳本完全沒有做任何事情。

我已經在系統上安裝了一個監視工具,會發生什麼情況是某些進程在一段時間後完成並且沒有新進程啓動。因此,系統一直處於活動狀態,直到子進程繁忙,並且一旦沒有更多作業從隊列中釋放出來就變爲空閒狀態。

所以我的問題是,有沒有人知道解釋這種行爲的任何理由?

編輯:經過一年左右的時間,這個問題不再是可重現的,無論是在屏幕上的一些補丁或python本身。我接受了答案,因爲它提供了很好的測試方向。

+0

你能告訴我們問題出現時你使用的是什麼版本的python和screen,以及你現在用的是什麼版本,問題不再發生了?我自己有一個非常類似的問題。 – SpoonMeiser 2014-02-24 11:27:21

+0

對不起SpoonMeiser,問題太早了,我再也沒有這些信息了。從那時起我開始使用tmux而不是屏幕。至於解決方法,我使用文件日誌記錄而不是打印到stdout/stderr。 – Unode 2014-02-25 11:40:24

回答

4

我無法解釋你所看到的原因。不過,我確實知道你可以嘗試下一步。

  1. 嘗試將腳本的輸出傳輸到: tee out.txt 如果沒有效果,請嘗試...
  2. 在另一個[hop]主機上運行屏幕。從那裏SSH到你的工作主機。在非仿真外殼中運行腳本。然後隨時斷開連接並重新連接,以檢查過程。這應該隱藏屏幕無論如何涉及的工作人員。

請回復這些測試的結果。這會讓我繼續下去。

+0

因爲我不想停止腳本,所以我沒有完全運行您在第2步中描述的內容。相反,我在跳躍主機上啓動了一個屏幕,向服務器ssh發送,並將服務器的屏幕連接到其中。然後分離跳躍屏幕,將服務器連接在裏面。 – Unode 2011-05-08 02:47:03

+0

哦,很好的電話。我喜歡!祝你好運。 – 2011-05-08 03:29:07

+0

現在所有計算都已完成,2屏幕方法可防止出現任何其他問題。但我仍然不明白其背後的原因。因此,我想人們會詳細說明解釋發生了什麼的更多可能性。無論如何,解決方法爲+1。 – Unode 2011-05-16 23:50:41