Warum wird mein Thread ausgeführt, bevor „Thread.start()' in Python aufgerufen wird?

Susan Sarandon
Freigeben: 2024-11-10 08:11:02
Original
648 Leute haben es durchsucht

Why Does My Thread Run Before Calling `Thread.start()` in Python?

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,))
Nach dem Login kopieren

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")
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage