Vorzeitige Thread-Ausführung ohne Startaufruf
In Python startet das Erstellen eines Thread-Objekts nicht automatisch dessen Ausführung. Es ist jedoch möglich, dass ein Thread scheinbar bereits mit der Ausführung beginnt, bevor die start()-Methode aufgerufen wird. Dieses Verhalten kann auf eine unsachgemäße Thread-Erstellung zurückgeführt werden und wird unten erläutert.
Bedenken Sie den folgenden Codeausschnitt:
t1 = threading.Thread(target=self.read) print("something") t2 = threading.Thread(target=self.runChecks(), args=(self,))
In diesem Beispiel soll die Funktion „self.read“ unbegrenzt ausgeführt werden. verhindert, dass das Programm die nachfolgende Druckanweisung erreicht. Allerdings überspringt das Programm die print-Anweisung vollständig. Dieses Verhalten erscheint ungewöhnlich, da der Aufruf von start() für einen Thread normalerweise ermöglicht, dass seine Ausführung beginnt und linear fortschreitet.
Die Erklärung für dieses Problem liegt in der Syntax, die zum Erstellen des Threads verwendet wird. In der ersten Zeile rufen die Klammern nach self.read effektiv die Funktion auf und weisen ihren Rückgabewert als Ziel für den Thread zu. Dies bedeutet, dass self.read tatsächlich im Hauptthread und nicht im neu erstellten Thread ausgeführt wird.
Um dies zu beheben, entfernen Sie einfach die Klammern aus dem Zielargument:
t1 = threading.Thread(target=self.read) t1.start() print("something")
Das stellt sicher dass self.read zur Zielfunktion wird, die vom Thread ausgeführt werden soll, und erst mit der Ausführung beginnt, nachdem t1.start() aufgerufen wurde.
Für Ziele, die Argumente erfordern, verwenden Sie die Argumente oder kwargs Parameter von threading.Thread oder verwenden Sie einen Lambda-Ausdruck. Zum Beispiel:
thread = threading.Thread(target=lambda: f(a, b, x=c))
Diese Syntax übergibt die Funktion und ihre Argumente an den Thread und gewährleistet so eine ordnungsgemäße Ausführung.
Bedenken Sie, dass Lambda-Funktionen ihre Argumente bei Verwendung und nicht bei der Definition auswerten. Dies bedeutet, dass die Neudefinition von Variablen vor der Planung des Threads zu unerwarteten Ergebnissen führen kann.
Das obige ist der detaillierte Inhalt vonWarum wird mein Thread ausgeführt, bevor „start()' in Python aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!