python多线程:生产者与消费者,高级锁定Condition、queue队列使用案例与注意事项

高级锁定

这是python中的另一种中锁定,就像是它的名字一样是可以有条件的condition,首先程序使用acquire进入锁定状态,如果需要符合一定的条件才处理数据,此时可以调用wait,让自己进入睡眠状态,程序设计时候需要用notify通知其他线程,然后放弃锁定release
此时其他再等待的线程因为受到通知notify,这时候被激活了,就开始运作。

生产者与消费者的设计

程序用producer方法叙述生产者运作方式,基本上需要生产5个数据(在data列表)才让自己进入睡眠状态,然后通知其他线程,再解锁。
consumer()方法则是当data列表没有数据时候,才让自己进入睡眠状态,然后通知其他线程,再解锁。
这个程序首先建立threading.Condition()然后设定资源列表data是空的,接着建立线程与启动线程,由于produce和consumer方法皆是一个无限循环,所以程序将持续执行。

import random
import threading


# 定义一个生产任务
def producer():
    while True:
        # 获得这把锁,一旦获得就锁住了
        condition.acquire()
        if len(data) >= 5:
            # 生产线程已经满足生产要求,进入到睡眠状态
            print(f'{
     
     threading.current_thread().name} waiting...')
            condition.wait()
        else:
            # 随机生产一个整型数据
            data.append(random.randint(1, 100))
            print(f'生产线库存:{
     
     data}')
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值