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中暂存上传图片的方法
Feb 18 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
python爬虫之xpath的基本使用详解
Apr 18 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
python中的global关键字的使用方法
Aug 20 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
python实现canny边缘检测
Sep 14 Python
python 高阶函数简单介绍
Feb 19 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
PHP读写文件的方法(生成HTML)
2006/11/27 PHP
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
Python操作csv文件实例详解
2017/07/31 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
电话销售经理岗位职责
2013/12/07 职场文书
经理秘书找工作求职信
2013/12/19 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
大学生学期个人总结
2015/02/12 职场文书
圆明园观后感
2015/06/03 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
Python 实现Mac 屏幕截图详解
2021/10/05 Python
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技