Python im GNU-Bildschirm wird möglicherweise inaktiv, wenn der Bildschirm entfernt wird

8

Ich habe ein Python-Skript, das Multiprocessing und Subprozess verwendet, um mehrere externe Befehle parallel mit verschiedenen Argumenten zu starten. Der Code kann hier gefunden werden.

Aus praktischen Gründen starte ich dieses Skript in einer GNU-Bildschirmsitzung. Die Maschine, auf der dieses Skript ausgeführt wird, verfügt über 12 Prozessoren, die inaktiv sind, bis Prozesse aktiv werden.

Jeder der Prozesse dauert zwischen ein paar Stunden bis zu ein paar Tagen, daher laufe ich oft vom Computer ab und lösche die Bildschirmsitzung.

In letzter Zeit habe ich jedoch ein Verhalten bemerkt, das ich noch nie zuvor erlebt habe. Bei einigen Gelegenheiten bin ich zur Maschine zurückgekehrt, um sie mit einer Last von Null im Leerlauf zu finden. Wenn ich eine Liste der aktiven Prozesse entweder über ps ux oder top bekomme, kann ich das Skript (und die Subprozesse) immer noch in der Liste der Prozesse finden. Ich schließe dann die Bildschirmsitzung erneut an, um den Status des Programms zu überprüfen, und sofort wird eine neue Gruppe von Prozessen an die Warteschlange gesendet, und die Auslastung des Systems wird innerhalb von Sekunden auf 12 zurückgesetzt. Beachten Sie, dass ich nichts anderes getan habe, als die Bildschirmsitzung erneut anzuhängen.

Ich habe ein Monitoring-Tool auf dem System installiert und was passiert ist, dass einige Prozesse nach einer bestimmten Zeit abgeschlossen sind und keine neuen Prozesse gestartet werden. Das System ist also so lange aktiv, bis Subprozesse ausgelastet sind und wird inaktiv, sobald keine Jobs mehr aus der Warteschlange freigegeben werden.

Meine Frage ist also, kennt jemand irgendeinen Grund, der dieses Verhalten erklärt?

BEARBEITEN : Nach einem Jahr oder so ist dieses Problem nicht mehr reproduzierbar, entweder ein Patch auf dem Bildschirm oder Python selbst. Ich akzeptiere die Antwort, da sie eine gute Anleitung zum Testen liefert.

    
unode 08.05.2011, 01:58
quelle

1 Antwort

4

Ich kann den Grund für das, was Sie sehen, nicht erklären. Allerdings habe ich eine Vorstellung davon, was du als nächstes versuchen kannst.

  1. Versuchen Sie, die Ausgabe des Skripts an: | zu übergeben Abschlag.txt Wenn das keinen Effekt hat, versuchen Sie ...
  2. Bildschirm auf einem anderen [Hop] Host ausführen. Von dort SSH in Ihren Arbeiterwirt. Führen Sie Ihr Skript in der nicht emulierten Shell aus. Dann zögern Sie nicht, von Ihrem Hop zu trennen und neu zu verbinden, um den Prozess zu überprüfen. Dies sollte sich vor dem Arbeiter verbergen, in dem sich der Bildschirm sowieso befindet.

Bitte kommentieren Sie die Ergebnisse dieser Tests zurück. Das wird mir mehr geben, um weiterzumachen.

    
Bruno Bronosky 08.05.2011, 02:28
quelle