Python线程条件变量Condition原理解析

 更新时间:2020年01月20日 10:10:28   作者:虚生  
这篇文章主要介绍了Python线程条件变量Condition原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • yolov5模型配置yaml文件详细讲解

    yolov5模型配置yaml文件详细讲解

    YOLOV5模型配置文件存放在modules文件夹下,这里使用的是 yolov5s.yaml,下面这篇文章主要给大家介绍了关于yolov5模型配置yaml文件的相关资料,需要的朋友可以参考下
    2022-09-09
  • Python实现的ftp服务器功能详解【附源码下载】

    Python实现的ftp服务器功能详解【附源码下载】

    这篇文章主要介绍了Python实现的ftp服务器功能,结合实例形式分析了Python构建ftp服务器功能的相关设置、实现技巧与操作注意事项,并附带源码供读者下载参考,需要的朋友可以参考下
    2019-06-06
  • django之导入并执行自定义的函数模块图解

    django之导入并执行自定义的函数模块图解

    这篇文章主要介绍了django之导入并执行自定义的函数模块图解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 用Python实现通过哈希算法检测图片重复的教程

    用Python实现通过哈希算法检测图片重复的教程

    这篇文章主要介绍了用Python实现通过哈希算法检测图片重复的教程,这个方法被Iconfinder用作防盗版技术,需要的朋友可以参考下
    2015-04-04
  • Python爬虫抓取技术的一些经验

    Python爬虫抓取技术的一些经验

    这篇文章主要介绍了Python爬虫抓取技术的一些经验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python使用openpyxl批量处理数据

    Python使用openpyxl批量处理数据

    openpyxl 是一个用于处理 xlsx 格式Excel表格文件的第三方python库,其支持Excel表格绝大多数基本操作。本文给大家介绍Python使用openpyxl批量处理数据的操作方法,感兴趣的朋友一起看看吧
    2021-06-06
  • jupyter notebook加载和运行.py文件方式

    jupyter notebook加载和运行.py文件方式

    这篇文章主要介绍了jupyter notebook加载和运行.py文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 10个Python常用的损失函数及代码实现分享

    10个Python常用的损失函数及代码实现分享

    损失函数是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。本文为大家总结了10个常用的损失函数及Python代码实现,需要的可以参考一下
    2022-09-09
  • 简单学习Python多进程Multiprocessing

    简单学习Python多进程Multiprocessing

    这篇文章主要和大家一起简单的学习Python多进程Multiprocessing ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Python接口自动化之cookie、session应用详解

    Python接口自动化之cookie、session应用详解

    本文主要介绍cookie、session原理及在自动化过程中如何利用cookie、session保持会话状态的应用,有需要的朋友可以参考下,希望可以有所帮助
    2021-08-08

最新评论