Thread-Ausführung vor explizitem Aufruf
Das Multithreading-Modul von Python ermöglicht die parallele Ausführung von Code mithilfe von Thread-Objekten. Beim Erstellen und Konfigurieren von Threads kann jedoch ein ungewöhnliches Verhalten auftreten.
Das Problem tritt auf, wenn eine Funktion mit nachgestellten Klammern an das Zielargument eines Threads übergeben wird, wie unten gezeigt:
t1 = threading.Thread(target=self.read())
Dieses Verhalten beruht auf der falschen Vorstellung, dass der Aufruf von target=self.read() dem Thread die Ausführung von self.read() zuweist. Das ist leider falsch. Durch Anhängen der Klammern wird die Funktion sofort aufgerufen und stattdessen ihr Rückgabewert als Ziel zugewiesen. Bei einem Thread-Objekt wird erwartet, dass es eine Funktion als Ziel erhält.
Um dieses Problem zu beheben, entfernen Sie einfach die Klammern aus dem Zielargument und rufen Sie explizit die start()-Methode des Threads auf:
t1 = threading.Thread(target=self.read) t1.start()
Jetzt wird self.read() auf unbestimmte Zeit im neu erstellten Thread ausgeführt, sodass das Programm fortfahren und „etwas“ drucken kann. Diese Änderung stellt sicher, dass die Funktion korrekt als Ziel zugewiesen wird und nicht vorzeitig ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWarum wird mein Python-Thread ausgeführt, bevor ich ihn explizit starte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!