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.
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.
Bitte kommentieren Sie die Ergebnisse dieser Tests zurück. Das wird mir mehr geben, um weiterzumachen.
Tags und Links python subprocess multiprocessing gnu-screen idle-processing