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中bisect模块用法实例
Sep 25 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
浅谈Python的list中的选取范围
Nov 12 Python
python程序封装为win32服务的方法
Mar 07 Python
python实现移位加密和解密
Mar 22 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
python中if和elif的区别介绍
Nov 07 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正则表达匹配中文问题分析小结
2012/03/25 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
jQuery手指滑动轮播效果
2016/12/22 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
JavaScript模块详解
2017/12/18 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python实现名片管理系统项目
2019/04/26 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python实现tail -f 功能
2020/01/17 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
浅谈Python中的继承
2020/06/19 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
企业车辆管理制度
2014/01/24 职场文书
体育教师求职信
2014/06/30 职场文书
庆元旦活动总结
2014/07/09 职场文书
龙门石窟导游词
2015/02/02 职场文书
社团个人总结范文
2015/03/05 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
PyTorch 如何自动计算梯度
2021/05/23 Python
python turtle绘图命令及案例
2021/11/23 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android