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()

最新文章

  1. Linux内核分析之可执行程序的装载和启动
  2. 【BZOJ】2693: jzptab
  3. CSS权威指南 - 基本视觉格式化 4
  4. POJ-2726-Holiday Hotel
  5. ubuntu 12.04安装telnet和ssh服务
  6. SteamVR Unity工具包(VRTK)之控制器交互
  7. Ubuntu下安装可视化SVN客户端Rabbitvcs
  8. html利用锚点实现定位代码实例
  9. linux ubuntu ppa源
  10. UVa11404 - Palindromic Subsequence(区间DP+打印路径)
  11. Facebook 开源三款图像识别人工智能软件
  12. CPU保护模式深入探秘
  13. http协议之cookie标准RFC6265介绍
  14. 多行文本省略号的实现.html
  15. 嵌套ajax 页面卡死的问题
  16. WEB服务器防盗链_HttpAccessKeyModule_Referer(Nginx&&PHP)
  17. python day two,while
  18. 基于AOP的iOS用户操作引导框架设计
  19. 三种方法实现CSS三栏布局
  20. 在struts.xml中配置默认action遇到的问题

热门文章

  1. 快速理解YOLO目标检测
  2. gcc 相关总结 动态链接库
  3. Comet OJ Contest #0 解方程(暴力)
  4. 《Python学习手册 第五版》 -第6章 动态类型
  5. python练习——第3题
  6. [Effective Java 读书笔记] 第8章 通用程序设计
  7. 1163 - Bank Robbery
  8. table-cell设置宽高、居中
  9. C语言基础二 练习
  10. PMP--1.4 项目描述