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操作mysql中文显示乱码的解决方法
Oct 11 Python
Python中IPYTHON入门实例
May 11 Python
python实现提取百度搜索结果的方法
May 19 Python
Python中操作符重载用法分析
Apr 29 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
python对象与json相互转换的方法
May 07 Python
django 信号调度机制详解
Jul 19 Python
postman传递当前时间戳实例详解
Sep 14 Python
Python接口自动化测试框架运行原理及流程
Nov 30 Python
python制作微博图片爬取工具
Jan 16 Python
pytorch 实现多个Dataloader同时训练
May 29 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 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
header()函数使用说明
2006/11/23 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
php格式化json函数示例代码
2016/05/12 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
Jquery ui css framework
2010/06/28 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
javascript实现数独解法
2015/03/14 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
canvas时钟效果
2017/02/16 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
大一期末自我鉴定
2013/12/13 职场文书
人事文员岗位职责
2014/02/16 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
辞职信格式模板
2015/02/27 职场文书
个人求职意向书
2015/05/11 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
详解MySQL主从复制及读写分离
2021/05/07 MySQL