In diesem Artikel erfahren Sie, was eine Python-Thread-Sperre ist. Erfahren Sie mehr über Python-Thread-Sperren und welche Rolle Thread-Sperren bei der Python-Programmierung spielen können.
Thread-Sperre (Mutex-Sperre Mutex)
Mehrere Threads können unter einem Prozess gestartet werden, und mehrere Threads teilen sich den Speicherplatz des übergeordneten Prozesses, was bedeutet, dass jeder Was passiert zu diesem Zeitpunkt, wenn zwei Threads gleichzeitig dieselben Daten ändern möchten?
Verwendung von Sperren:
Sperre erstellen
mutex = threading.Lock()
Sperre
mutex.acquire([timeout ])
Release
mutex.release()
import time import threading def addNum(): global num #在每个线程中都获取这个全局变量 print('--get num:',num ) time.sleep(1) num -=1 #对此公共变量进行-1操作 num = 100 #设定一个共享变量 thread_list = [] for i in range(100): t = threading.Thread(target=addNum) t.start() thread_list.append(t) for t in thread_list: #等待所有线程执行完毕 t.join() print('final num:', num )
Normalerweise sollte das Ergebnis dieser Zahl 0 sein, aber wenn Sie es ein paar Mal auf Python 2.7 ausführen, werden Sie feststellen dass das endgültige numerische Ergebnis nicht immer 0 ist. Warum ist das Ergebnis bei jeder Ausführung anders? Ha, es ist ganz einfach. Angenommen, Sie haben zwei Threads A und B. Zu diesem Zeitpunkt muss num um 1 verringert werden. Da die beiden Threads gleichzeitig ausgeführt werden, ist es sehr wahrscheinlich, dass die beiden Threads gleichzeitig num = 100 weggenommen haben . Diese anfängliche Variable wird zur Berechnung an die CPU übergeben. Wenn Thread A die Berechnung abschließt, ist das Ergebnis 99, aber zu diesem Zeitpunkt schließt Thread B die Berechnung ab und das Ergebnis ist ebenfalls 99. Nach den Ergebnissen der CPU-Berechnungen von Die beiden Threads werden gleichzeitig der Variablen num zugewiesen, und das Ergebnis ist jeweils 99. Was zu tun? Es ist sehr einfach, wenn jeder Thread öffentliche Daten ändern möchte, um zu verhindern, dass andere die Daten ändern, bevor er sie vollständig geändert hat. Er kann den Daten eine Sperre hinzufügen, sodass andere Threads warten müssen, wenn sie die Daten ändern möchten Auf diese Daten können Sie erst wieder zugreifen, nachdem Sie die Änderung abgeschlossen und die Sperre aufgehoben haben.
Hinweis: Nicht unter 3.x ausführen. Aus irgendeinem Grund sind die Ergebnisse unter 3.x immer korrekt. Es kann sein, dass die Sperre automatisch hinzugefügt wird
Das ist es Für alle in diesem Artikel beschriebenen Inhalte stellt dieser Artikel hauptsächlich das relevante Wissen über Python-Mutex-Sperre vor. Ich hoffe, dass Sie die Informationen verwenden können, um den oben genannten Inhalt zu verstehen. Ich hoffe, dass das, was ich in diesem Artikel beschrieben habe, für Sie hilfreich ist und Ihnen das Erlernen von Python erleichtert.
Weitere Informationen zu diesem Thema finden Sie in der Spalte Python-Tutorial auf der chinesischen PHP-Website.
Das obige ist der detaillierte Inhalt vonVerwendung der Python-Thread-Sperre (Beispielanalyse). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!