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.

  • Modifikation von Python-Daemon-Skript, Stop nicht wieder OK (aber tötet den Prozess)
  • Daemon vs Upstart für Pythonenskript
  • Wie kann ich Celery einrichten, um eine benutzerdefinierte Initialisierungsfunktion aufzurufen, bevor ich meine Aufgaben ausführe?
  • So verschieben Sie den SimpleSocket Server in einen Hintergrundprozess
  • Wie man Daemon-Prozess von Python auf Windows starten?
  • Wie kann man SIGTERM-Signal anmutig verarbeiten?
  • 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?

  • PyTables Schreibfehler
  • Lese HDF5-Datei zu pandas DataFrame mit Bedingungen
  • Store Multi-Index Pandas Dataframe mit hdf5 Tischformat
  • Pandas to_hdf gelingt aber dann read_hdf scheitert
  • Sparen mit h5py Arrays in verschiedenen Größen
  • Auflisten von Datensätzen in einer Gruppe in HDF5
  • 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.