Thread beginnt mit der Ausführung, bevor Thread.start aufgerufen wird
In Python ermöglicht Threading die Erstellung und Ausführung mehrerer Threads innerhalb eines einzigen Programms. Ein häufiges Missverständnis besteht darin, dass Threads sofort nach ihrer Erstellung mit der Ausführung beginnen, auch ohne expliziten Aufruf von Thread.start(). Dies ist jedoch nicht der Fall.
Bedenken Sie den folgenden Codeausschnitt:
import threading t1 = threading.Thread(target=self.read()) print("something") t2 = threading.Thread(target=self.runChecks(), args=(self,))
In diesem Beispiel werden zwei Threads t1 und t2 erstellt, aber keiner von ihnen ist noch gestartet. Die Funktion self.read() läuft auf unbestimmte Zeit, was bedeutet, dass das Programm niemals die Druckzeile erreicht. Dieses Verhalten tritt auf, obwohl t1.start() nicht aufgerufen wird, von dem erwartet wird, dass es den Thread startet und dann mit der nächsten Zeile fortfährt.
Der Grund für dieses unerwartete Verhalten liegt in den abschließenden Klammern nach target=self. lesen(). Diese Syntax ruft die Funktion self.read() tatsächlich sofort auf und übergibt den Rückgabewert als Zielargument an den Thread-Konstruktor. Da Python erwartet, dass eine Funktion als Ziel übergeben wird, besteht die Lösung darin, die abschließenden Klammern zu entfernen und explizit t1.start() aufzurufen, um den Thread zu starten:
import threading t1 = threading.Thread(target=self.read) t1.start() print("something")
Alternativ, wenn die Zielfunktion Argumente erfordert , können Sie die Argumente args und kwargs für threading.Thread verwenden oder eine Lambda-Funktion definieren, die an den Konstruktor übergeben wird. Denken Sie daran, dass, wenn Sie sich für die Verwendung eines Lambda entscheiden, die Funktion und ihre Argumente bei der Planung des Threads nachgeschlagen werden, nicht bei der Definition des Lambda. Dies kann zu unerwarteten Ergebnissen führen, wenn Sie eine der Variablen neu zuweisen, bevor der Thread ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWarum wird mein Thread ausgeführt, bevor „Thread.start()' in Python aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!