Wie im vorherigen Abschnitt verfügt die Threading.Thread-Klasse von Python über eine Ausführungsmethode, mit der die Funktionsfunktionen des Threads definiert werden. Diese Methode kann in Ihrer eigenen Thread-Klasse überschrieben werden. Nachdem Sie Ihre eigene Thread-Instanz erstellt haben, können Sie den Thread über die Startmethode der Thread-Klasse starten und ihn zur Planung an die virtuelle Python-Maschine übergeben. Wenn der Thread ausgeführt werden kann, wird die Ausführungsmethode aufgerufen Faden. Beginnen wir mit dem ersten Beispiel:
# encoding: UTF-8 import threading import time class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm "+self.name+' @ '+str(i) print msg def test(): for i in range(5): t = MyThread() t.start() if __name__ == '__main__': test()
Ausführungsergebnis:
I'm Thread-1 @ 0
I ' m Thread-2 bei 0
Ich bin Thread-5 bei 0
Ich bin Thread-3 bei 0
Ich bin Thread-4 bei 0
Ich bin Thread-3 bei 1
Ich bin Thread-4 bei 1
Ich bin Thread-5 bei 1
Ich bin Thread -1 @ 1
Ich bin Thread-2 @ 1
Ich bin Thread-4 @ 2
Ich bin Thread-5 @ 2
Ich bin Thread-2 bei 2
Ich bin Thread-1 bei 2
Ich bin Thread-3 bei 2
Aus dem Code und den Ausführungsergebnissen können wir ersehen, dass die Ausführungsreihenfolge von Multithread-Programmen ungewiss ist. Wenn die Sleep-Anweisung ausgeführt wird, wird der Thread blockiert (Blockiert). Nach dem Ende des Ruhezustands wechselt der Thread in den Bereitschaftszustand (Runnable) und wartet auf die Planung. Bei der Thread-Planung wird ein Thread zur Ausführung ausgewählt. Der obige Code kann nur garantieren, dass jeder Thread die gesamte Ausführungsfunktion ausführt, die Startreihenfolge der Threads und die Ausführungsreihenfolge jeder Schleife in der Ausführungsfunktion können jedoch nicht bestimmt werden.
Darüber hinaus ist Folgendes zu beachten:
1 Jeder Thread muss einen Namen haben. Obwohl der Name des Thread-Objekts im obigen Beispiel nicht angegeben ist, weist Python automatisch einen zu Name des Threads.
2. Der Thread ist abgeschlossen, wenn seine run()-Methode endet.
3. Der Thread-Planer kann nicht gesteuert werden, aber die Thread-Planungsmethode kann auf andere Weise beeinflusst werden.
Das obige Beispiel zeigt lediglich das Erstellen eines Threads, das aktive Anhalten und Beenden des Threads. Im nächsten Abschnitt besprechen wir die Thread-Synchronisierung mithilfe von Mutex-Sperren.