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中的sort方法使用详解
Jul 25 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
如何在python中使用selenium的示例
Dec 26 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Python logging模块用法示例
Aug 28 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
基于Python快速处理PDF表格数据
Jun 03 Python
Python如何执行系统命令
Sep 23 Python
python获取linux系统信息的三种方法
Oct 14 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
记录Django开发心得
2014/07/16 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
numpy 声明空数组详解
2019/12/05 Python
Python 字典中的所有方法及用法
2020/06/10 Python
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
火山动力Java笔试题
2014/06/26 面试题
《小动物过冬》教学反思
2014/04/17 职场文书
餐厅筹备计划书
2014/04/25 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
辞职信的写法
2015/02/27 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
学子宴致辞大全
2015/07/27 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
话题作文之学会尊重
2019/12/16 职场文书
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL