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写xml文件的操作实例
Oct 05 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
Linux 修改Python命令的方法示例
Dec 03 Python
解决python有时候import不了当前的包问题
Aug 28 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
python生成任意频率正弦波方式
Feb 25 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
Django mysqlclient安装和使用详解
Sep 17 Python
Python制作简单的剪刀石头布游戏
Dec 10 Python
python Tkinter模块使用方法详解
Apr 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 中英文语言转换类代码
2011/08/11 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
jQuery 树形结构的选择器
2010/02/15 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
详解JS模块导入导出
2017/12/20 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
Python切片索引用法示例
2018/05/15 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
super关键字的用法
2012/04/10 面试题
怀念母亲教学反思
2014/04/28 职场文书
2014年居委会工作总结
2014/12/09 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python