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里将list中元素依次向前移动一位
Sep 12 Python
python实现K最近邻算法
Jan 29 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
python设置表格边框的具体方法
Jul 17 Python
如何在mac版pycharm选择python版本
Jul 21 Python
Python常用模块函数代码汇总解析
Aug 31 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 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实现ping
2006/10/09 PHP
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
javascript中的delete使用详解
2013/04/11 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
Python中url标签使用知识点总结
2020/01/16 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
物业经理求职自我评价
2013/09/22 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
如何用python清洗文件中的数据
2021/06/18 Python
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS