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使用cPickle模块序列化实例
Sep 25 Python
Python进程通信之匿名管道实例讲解
Apr 11 Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
Nov 05 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
python制作填词游戏步骤详解
May 05 Python
python 整数越界问题详解
Jun 27 Python
python可视化爬虫界面之天气查询
Jul 03 Python
基于python代码批量处理图片resize
Jun 04 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使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
python计算书页码的统计数字问题实例
2014/09/26 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
python3实现单目标粒子群算法
2019/11/14 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
应届生高等护理求职信
2013/10/12 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
红色电影观后感
2015/06/18 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书