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 相关文章推荐
Python的条件语句与运算符优先级详解
Oct 13 Python
python实现简单点对点(p2p)聊天
Sep 13 Python
Python机器学习之SVM支持向量机
Dec 27 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
python实现多线程端口扫描
Aug 31 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
python中如何写类
Jun 29 Python
详解如何用Python实现感知器算法
Jun 18 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的网址
2006/11/25 PHP
yii操作cookie实例简介
2014/07/09 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
进一步理解Python中的函数编程
2015/04/13 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
python简单实现刷新智联简历
2016/03/30 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
学习和使用python的13个理由
2019/07/30 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
详解Python 函数参数的拆解
2020/09/02 Python
python 如何调用远程接口
2020/09/11 Python
外贸业务员求职自荐信分享
2013/09/21 职场文书
个人担保书范文
2014/05/20 职场文书
求职自我评价范文100字
2014/09/23 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
我的生日感言
2015/08/03 职场文书