Python-daemon-thread nicht beendet wird, wenn die übergeordnete thread beendet
Ich habe einige Python-code erstellt einen Dämon-thread. Die übergeordneten thread endet fast sofort, aber der daemon thread hält den Druck schlafen.
import threading
import time
def int_sleep():
for _ in range(1, 600):
time.sleep(1)
print("sleep")
def main():
thread = threading.Thread(target=int_sleep)
thread.daemon = True
thread.start()
time.sleep(2)
print("main thread end...")
thread = threading.Thread(target=main)
thread.start()
sys.version:
'3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)]'
Drucke:
sleep
main thread end...
sleep
sleep
sleep
Warum nicht das Python-daemon thread beenden, wenn die übergeordnete thread beendet?
- Überprüfen Sie heraus den thread.daemon-Einstellung .. stackoverflow.com/questions/4330111/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie angeben
thread.daemon = True
für Ihre python-thread, dann wird das Programm sofort angehalten, wenn nur der Dämon ist Links. Die Befehle auf stdout verloren.Fügen Sie diese in eine Datei namens main.py
Führen Sie es wie folgt:
Sehen, es druckt nichts, da der thread gestartet. Legen Sie es auf ein daemon und begann es. Dann wird das Programm beendet.
Zusätzliche Hinweise: Wenn Sie fügen Sie diesen code in eine python-interpreter, alle print-Anweisungen erscheint auf dem terminal, weil der Dämon verliert nie halten der Verbindung zu stdout.
Lesen Sie mehr: http://docs.python.org/2/library/threading.html
Vollständigkeit halber Lesen Sie diesen Artikel.
https://joeshaw.org/2009/02/24/605/
Ich bin mir nicht sicher, ob das ein bug ist gefixt worden oder ist das ein bug noch in der Existenz oder dem Verhalten als pro-design. Aber wenn Sie sehen, Verrücktheit behalten Sie dies im Hinterkopf.
Also eine alternative ist, um eine Schleife in der Kind-thread auf eine exit-flag, die Sie in die main, wenn du fertig bist. Dann warten Sie in der Hauptsache für das Kind thread, um zu sterben und dann bereinigen.
Kann ich nur reproduzieren das beschriebene Verhalten von OP (unendliche Ausgabe von 'sleep') wenn von der python-shell. Wenn Sie aus einer Datei funktioniert es wie erwartet (ein paar Zeilen von 'sleep' und einer einzigen Zeile von " main thread Ende ...' )
Ähnlich, das zweite Programm sofort beendet, wenn die Ausführung als Datei, SONDERN gibt auch unendliche 'sleep' - Anweisung beim ausführen von der python-shell.
Mein Fazit: da der thread, der die python-shell wird weiterhin ausgeführt, auch nach der "main" beendet, verhindern, dass der Dämon(en) nicht beendet werden, wenn Sie von der python-shell.
Könnte dieses als ein Fehler (ich.e, dass Python das Verhalten ist unterschiedlich, je nachdem, wie das Skript ausgeführt wird) oder ist es zu erwarten ? Ich aufschieben, um mehr erfahrene Pythonistas...
BTW - getestet mit Python 3.2.3