您好,欢迎来到好土汽车网。
搜索
您的当前位置:首页python如何切换线程

python如何切换线程

来源:好土汽车网
条件对象能让一个线程 A 停下来,等待其他线程 B ,线程 B 满足了某个条件后通知(notify)线程 A 继续运行。线程首先获取一个条件变量锁,如果条件不足,则该线程等待(wait)并释放条件变量锁,如果满足就执行线程,也可以通知其他状态为 wait 的线程。其他处于 wait 状态的线程接到通知后会重新判断条件。

下面为一个有趣的例子

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()

运行结果如下:

LiLei: 嫁给我吧!?
HanMeiMei: 没有情调,不够浪漫,不答应
LiLei: 我单下跪,送上戒指!
HanMeiMei: 好吧,答应你了
LiLei: Li太太,你的选择太明治了。

Copyright © 2019- howto234.com 版权所有 湘ICP备2022005869号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务