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