Das Bedingungsobjekt ermöglicht es einem Thread A, anzuhalten und auf einen anderen Thread B zu warten. Nachdem Thread B eine bestimmte Bedingung erfüllt, benachrichtigt Thread B Thread A, damit er weiterlaufen kann. Der Thread erwirbt zunächst eine Bedingungsvariablensperre, wenn die Bedingung nicht ausreicht, und gibt die Bedingungsvariablensperre frei. Wenn sie erfüllt ist, wird der Thread ausgeführt und andere Threads im Wartezustand können ebenfalls benachrichtigt werden. Andere Threads im Wartezustand werden die Bedingungen nach Erhalt der Benachrichtigung neu beurteilen.
Das Folgende ist ein interessantes Beispiel
import threading class Boy(threading.Thread): def __init__(self, cond, name): super(Boy, self).__init__() self.cond = cond self.name = name def run(self): self.cond.acquire() print(self.name + ": 嫁给我吧!?") self.cond.notify() # 唤醒一个挂起的线程,让hanmeimei表态 self.cond.wait() # 释放内部所占用的琐,同时线程被挂起,直至接收到通知被唤醒或超时,等待hanmeimei回答 print(self.name + ": 我单下跪,送上戒指!") self.cond.notify() self.cond.wait() print(self.name + ": Li太太,你的选择太明治了。") self.cond.release() class Girl(threading.Thread): def __init__(self, cond, name): super(Girl, self).__init__() self.cond = cond self.name = name def run(self): self.cond.acquire() self.cond.wait() # 等待Lilei求婚 print(self.name + ": 没有情调,不够浪漫,不答应") self.cond.notify() self.cond.wait() print(self.name + ": 好吧,答应你了") self.cond.notify() self.cond.release() cond = threading.Condition() boy = Boy(cond, "LiLei") girl = Girl(cond, "HanMeiMei") girl.start() boy.start()
Die Laufergebnisse sind wie folgt:
LiLei: 嫁给我吧!? HanMeiMei: 没有情调,不够浪漫,不答应 LiLei: 我单下跪,送上戒指! HanMeiMei: 好吧,答应你了 LiLei: Li太太,你的选择太明治了。
Das obige ist der detaillierte Inhalt vonSo wechseln Sie Threads in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!