Python-Thread-Daemon-Eigenschaft

Ich bin ein wenig verwirrt darüber, was ein Faden zu einem Dämon bedeutet. Die Dokumentation sagt dies:

Ein Thread kann als "Daemon Thread" markiert werden. Die Bedeutung dieses Flags ist, dass das gesamte Python-Programm ausläuft, wenn nur Daemon-Threads übrig sind. Der Anfangswert wird vom erstellten Thread übernommen. Das Flag kann über die Daemon-Eigenschaft gesetzt werden.

Ich bin mir nicht sicher, was das anders als ein normaler Thread macht. Ist das sagen, dass dieses Programm nicht immer beenden wird?

def threadfunc(): while True: time.sleep(1) threading.Thread(target=threadfunc).start() 

Obwohl der Hauptfaden seine Ausführung beendet hat. Während

 def threadfunc(): while True: time.sleep(1) th = threading.Thread(target=threadfunc) th.daemon = True th.start() 

Wird sofort beenden

Ich frage, weil ich eine Situation habe, in der ich in meinem Hauptfaden sys.exit () anrufe, und der Prozess hängt einfach und meine anderen Threads laufen, wie ich das Log sehen kann. Hat das etwas mit sys.exit () zu tun, das mit Threads lebendig ist?

  • Merkwürdige Ausgabe für Gewinde-Teilprozesse
  • Overriding python threading.Thread.run ()
  • Eine Frage auf Python GIL
  • Spielen Sie einen Ton mit Python-Unterprozess und Threading
  • Python-Threading Queue-Produzent-Verbraucher mit Thread-Safe
  • Konsumieren einer rabbitmq Nachrichtenwarteschlange mit mehreren Threads (Python Kombu)
  • Python: Schaffung eines neuen Prozesses
  • Multi-threaded Gebrauch von SQLAlchemy
  • 3 Solutions collect form web for “Python-Thread-Daemon-Eigenschaft”

    Ist das sagen, dass dieses Programm nicht immer beenden wird?

    Ja, das Programm wird nicht beenden, probier es einfach aus.

    Ich frage, weil ich eine Situation habe, in der ich in meinem Hauptfaden sys.exit () anrufe, und der Prozess hängt einfach und meine anderen Threads laufen, wie ich das Log sehen kann. Hat das etwas mit sys.exit () zu tun, das mit Threads lebendig ist?

    Ja, auch der exit wird nicht auf andere Threads gestoppt, er hebt einfach SystemExit im SystemExit . So, während der Hauptfaden aufhört (genau wie es auf irgendeine andere unbehandelte Ausnahme geht), werden alle anderen nicht-daemonischen Fäden weiter arbeiten.

    Einstellen von thread.daemon = True erlaubt es dem Hauptprogramm zu thread.daemon = True . Apps warten normalerweise, bis alle Kinderfäden fertig sind, bevor sie fertig sind.

     th.daemon = True #set this thread as a Daemon Thread 

    Du kannst in einem Daemon-Thread als Service denken, das bedeutet, dass es im Hintergrund deines Computers läuft, der verschiedene Aufgaben macht, wie das Indizieren von Dateien, das Analysieren von XML, das Abrufen von Nachrichten usw., alles, was ein langer Prozess ist.

    Dein Haupt-Thread wird fertig und dein Daemon wird immer noch im Hintergrund laufen, das ist der Grund, warum dein Programm aka Main Thread endet, wenn du nur eine Endlosschleife machen willst und du wirst deinen Thread noch laufen lassen. Ein Beispiel für einen Dämon-Thread ist die Garbage Collection.

    Python ist die beste Programmiersprache der Welt.