PythonLibrary中Condition的具体操作方案

你对Python 这一计算机语言感兴趣吗?你了解Python Library中Condition的具体实际应用操作的具体方法吗?假如你对Python Library的相关操作步骤感兴趣的话,你可以点击我们的文章对其进行一个更好的了解。

成都创新互联公司是一家专注于成都网站制作、网站设计与策划设计,镇康网站建设哪家好?成都创新互联公司做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:镇康等地区。镇康做网站价格咨询:18980820575

Condition 算是 Lock 和 Event 的杂交版本,除了作为 Lock 的基本功能外,还提供了 wait() 和 notify() 作为线程间 "消息通知"。

 
 
 
  1. from threading import *  
  2. from time import *  
  3. condi = Condition()  
  4. def t1():  
  5. condi.acquire()  
  6. try:  
  7. for i in range(10):  
  8. print currentThread().name, i  
  9. sleep(1)  
  10. if (i == 4): condi.wait()    

# wait() 释放锁,并进入等待状态。直到接收到 notify() 发送的消息后再次试图获取锁,继续后续代码执行。

 
 
 
  1. finally:  
  2. condi.release()  
  3. def t2():  
  4. condi.acquire()  
  5. try:  
  6. for i in range(10):  
  7. print currentThread().name, i  
  8. sleep(1)  
  9. finally:  
  10. condi.notify()   

# 在释放锁前通知等待的线程准备起床。

 
 
 
  1. condi.release()  
  2. Thread(target=t1).start()  
  3. Thread(target=t2).start()  

输出:

 
 
 
  1. $ ./main.py  
  2. Thread-1 0  
  3. Thread-1 1  
  4. Thread-1 2  
  5. Thread-1 3   

Thread-1 4 <--- Thread1 释放锁,开始等待。Thread-2 0 <--- Thread2 获得锁,开始执行。

 
 
 
  1. Thread-2 1  
  2. Thread-2 2  
  3. Thread-2 3  
  4. Thread-2 4  
  5. Thread-2 5  
  6. Thread-2 6  
  7. Thread-2 7  
  8. Thread-2 8  

Thread-2 9 <--- Thread2 发送通知,并释放锁。Thread-1 5 <--- Thread1 收到消息,再次拿到锁,开始未完成的工作。

 
 
 
  1. Thread-1 6  
  2. Thread-1 7  
  3. Thread-1 8  
  4. Thread-1 9 

wait() 实际可以分解为 "condi.release(); ... acquire()" 这两个动作。我们可以使用 Condition 包装已有的锁,当然也可以用 with/as 来改善我们的代码。

 
 
 
  1. lock = RLock()  
  2. condi = Condition(lock)  
  3. def t1():  
  4. with condi:  
  5. for i in range(10):  
  6. print currentThread().name, i  
  7. sleep(1)  
  8. if (i == 4): condi.wait()  
  9. def t2():  
  10. with lock:  
  11. for i in range(10):  
  12. print currentThread().name, i  
  13. sleep(1)  
  14. condi.notify()  
  15. Thread(target=t1).start()  
  16. Thread(target=t2).start()   

注意调用 notify() 和 notifyall() 的线程必须事先获得锁,否则会抛出异常。

新闻名称:PythonLibrary中Condition的具体操作方案
网站路径:http://www.csdahua.cn/qtweb/news9/56659.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网