Pythonthreading模块condition原理及运行流程详解

上传人:re****.1 文档编号:501286737 上传时间:2023-06-29 格式:DOC 页数:2 大小:36.50KB
返回 下载 相关 举报
Pythonthreading模块condition原理及运行流程详解_第1页
第1页 / 共2页
Pythonthreading模块condition原理及运行流程详解_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《Pythonthreading模块condition原理及运行流程详解》由会员分享,可在线阅读,更多相关《Pythonthreading模块condition原理及运行流程详解(2页珍藏版)》请在金锄头文库上搜索。

1、Pythonthreading模块conditio原理及运行流程详解onditio的处理流程如下:首先acire个条件变量,然后判断一些条件。*如果条件不满足则ait如果条件满足,进行一些处理改变条件后,通过noti方法通知其他线程,其他处于ai状态的线程接到通知后会重新判断条件。-不断的重复这一过程,从而解决复杂的同步问题。onditio的基本原理如下:可以认为onditio对象维护了一个锁(oc和o一个aitin池。线程通过aci获得onditio对象,当调用ai右法时,线程会释放onditio内部的锁并进入oc状态,同时在aitin池中记录这个线程。当调用noti方法时,onditio对

2、象会从aitin池中挑选一个线程,通知其调用ac旄法尝试取到锁。onditio对象的构造函数可以接受一个ocL寸象乍为参数,如果没有指定,则onditio对象会在内部自行创建一个oc。除了noti方法外,onditio对象还提供了notiy方法,可以通知aitin池中的所有线程尝试aci内部锁。由于上述机制,处于aitin状态的线程只能通过noti方法唤醒,所以notiy的作用在于防止有的线程永远处于沉默状态。演示条件变量同步的经典问题是生产者与消费者问题:假设有一群生产者Prodc和一群消费者(on)e通过一个市场来交互产品。生产者的策略是如果市场上剩余的产品少于个,那么就生产个产品放到市场

3、上;而消费者的策略是如果市场上剩余产品的数量多余个,那么就消费个产品。用onditio解决生产者与消费者问题的代码如下:codingtreatedonedoauthor:18665i)portthreadingi)portti)ec,assProducer(threading.Thread):生#产者函数defrun(se,f):g,oba,countwhi,eTrue:ifcon.acquire():当cont于等于的时候进行生产icontconaiteeconttrcontcontcontgenaerodcerintg完成生成后唤醒aitin状态的线程,从aitin池中挑选一个线程,通知其

4、调用ac方法尝试取到锁connotiyconreeaetieeecaonerthreadinghread消费者函数defrun(se,f):g,oba,countwhi,eTrue:当con以于等于的时候进行消费iconacireicontconaite,se:contcontgenaerintgconnotiyconsu)ecounttr(count#完成生成后唤醒waiting状态的线程,#从waiting池中挑选一个线程,通知其调用acquire方法尝试取到锁con.release()time.sleep(1)count=500con=threading.Condition()deftest():foriinrange(2):p=Producer().start()foriinrange(5):c=Consumer().start()if_name_=_main_:test()以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号