Für diejenigen, die zum ersten Mal mit der Programmiersprache Python in Berührung kommen, wissen sie zu Beginn des Erlernens der Python-Programmierung wenig über Python-Thread-Synchronisierung. In diesem Artikel werden wir etwas darüber lernenPython-MultithreadingSynchronisation und Python-Multithreading-Sperredieser Aspekt des Wissens.
Thread-Synchronisation
Wenn mehrere Threads gemeinsam bestimmte Daten ändern, kann es zu unvorhersehbaren Ergebnissen kommen. Um die Richtigkeit der Daten sicherzustellen, müssen mehrere Threads geändert werden . Threads werden synchronisiert.
Verwenden Sie Lock und Rlock des Thread-Objekts, um eine einfache Thread-Synchronisierung zu erreichen. Beide Objekte verfügen über eine Erfassungsmethode und eine Freigabemethode. Für Daten, die jeweils nur von einem Thread bearbeitet werden müssen, kann der Vorgang zwischen der Erfassung platziert werden und Freigabemethoden. Wie folgt:
Der Vorteil von Multithreading besteht darin, dass mehrere Aufgaben gleichzeitig ausgeführt werden können (zumindest fühlt es sich so an). Wenn Threads jedoch Daten gemeinsam nutzen müssen, kann es zu Problemen mit der Datensynchronisation kommen.
Stellen Sie sich eine Situation vor: Alle Elemente in einer Liste sind 0, der Thread „set“ ändert alle Elemente von hinten nach vorne auf 1 und der Thread „print“ ist dafür verantwortlich, die Liste von vorne nach hinten zu lesen und zu drucken.
Wenn sich dann der Thread „set“ zu ändern beginnt, druckt der Thread „print“ möglicherweise die Liste und die Ausgabe ist halb 0 und halb 1. Dies ist die Desynchronisation der Daten. Um diese Situation zu vermeiden, wurde das Konzept der Sperren eingeführt.
Multithread-Sperre
Die Sperre hat zwei Zustände – gesperrt und entsperrt. Immer wenn ein Thread wie „set“ auf gemeinsam genutzte Daten zugreifen möchte, muss er zuerst die Sperre erhalten. Wenn ein anderer Thread wie „print“ bereits eine Sperre erhalten hat, muss der Thread „set“ angehalten werden, was eine synchrone Blockierung darstellt bis der Thread " Drucken "Nachdem der Zugriff abgeschlossen und die Sperre aufgehoben wurde, lassen Sie den Thread weiter "setzen".
Nach einer solchen Verarbeitung werden beim Drucken der Liste entweder alle Nullen oder alle Einsen ausgegeben, und es gibt keine peinliche Szene mehr aus halben Nullen und halben Einsen mehr.
Beispiel
Ein Beispiel lautet wie folgt:
#!/usr/bin/python # -*- coding: UTF-8 -*- import threading import time class myThread (threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name # 获得锁,成功获得锁定后返回True # 可选的timeout参数不填时将一直阻塞直到获得锁定 # 否则超时后将返回False threadLock.acquire() print_time(self.name, self.counter, 3) # 释放锁 threadLock.release() def print_time(threadName, delay, counter): while counter: time.sleep(delay) print "%s: %s" % (threadName, time.ctime(time.time())) counter -= 1 threadLock = threading.Lock() threads = [] # 创建新线程 thread1 = myThread(1, "Thread-1", 1) thread2 = myThread(2, "Thread-2", 2) # 开启新线程 thread1.start() thread2.start() # 添加线程到线程列表 threads.append(thread1) threads.append(thread2) # 等待所有线程完成 for t in threads: t.join() print "Exiting Main Thread"
Das Obige ist der gesamte Inhalt dieses Artikels, dieser Artikel stellt hauptsächlich vorRelevant Kenntnisse der Python-Multithread-Synchronisation, ich hoffe, Sie können die Informationen verwenden, um den obigen 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 vonWas ist Python-Multithread-Synchronisation? Was ist eine Schraubensicherung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!