Python线程条件变量Condition原理解析


Posted in Python onJanuary 20, 2020

这篇文章主要介绍了Python线程条件变量Condition原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Condition 对象就是条件变量,它总是与某种锁相关联,可以是外部传入的锁或是系统默认创建的锁。当几个条件变量共享一个锁时,你就应该自己传入一个锁。这个锁不需要你操心,Condition 类会管理它。

acquire() 和 release() 可以操控这个相关联的锁。其他的方法都必须在这个锁被锁上的情况下使用。wait() 会释放这个锁,阻塞本线程直到其他线程通过 notify() 或 notify_all() 来唤醒它。一旦被唤醒,这个锁又被 wait() 锁上。

经典的 consumer/producer 问题的代码示例为:

import threading
import time
import logging

logging.basicConfig(level=logging.DEBUG,
          format='(%(threadName)-9s) %(message)s',)

def consumer(cv):
  logging.debug('Consumer thread started ...')
  with cv:
    logging.debug('Consumer waiting ...')
    cv.acquire()
    cv.wait()
    logging.debug('Consumer consumed the resource')
    cv.release()

def producer(cv):
  logging.debug('Producer thread started ...')
  with cv:
    cv.acquire()
    logging.debug('Making resource available')
    logging.debug('Notifying to all consumers')
    cv.notify()
    cv.release()

if __name__ == '__main__':
  condition = threading.Condition()
  cs1 = threading.Thread(name='consumer1', target=consumer, args=(condition,))
  #cs2 = threading.Thread(name='consumer2', target=consumer, args=(condition,state))
  pd = threading.Thread(name='producer', target=producer, args=(condition,))

  cs1.start()
  time.sleep(2)
  #cs2.start()
  #time.sleep(2)
  pd.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
Python装饰器用法示例小结
Feb 11 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python迭代dict的key和value的方法
Jul 06 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
用Python画小女孩放风筝的示例
Nov 23 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
Sep 28 Python
Python基于内置函数type创建新类型
Oct 22 Python
tensorflow tf.train.batch之数据批量读取方式
Jan 20 #Python
Python list运算操作代码实例解析
Jan 20 #Python
Python模块future用法原理详解
Jan 20 #Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 #Python
Python JSON编解码方式原理详解
Jan 20 #Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 #Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 #Python
You might like
php获取后台Job管理的实现代码
2011/06/10 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
判断对象是否Window的实现代码
2012/01/10 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
axios学习教程全攻略
2017/03/26 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
python操作ie登陆土豆网的方法
2015/05/09 Python
python中的colorlog库使用详解
2019/07/05 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
django迁移文件migrations的实现
2020/03/31 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
EntityManager都有哪些方法
2013/11/01 面试题
个人剖析材料及整改措施
2014/10/07 职场文书
学习保证书
2015/01/17 职场文书
主持人开幕词
2015/01/29 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
商标侵权律师函
2015/05/27 职场文书
汉字听写大会观后感
2015/06/12 职场文书
初中体育课教学反思
2016/02/16 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android