生产者与消费者模型改进

from queue import Queue
import time,random,threading
def xiaofei(name,q):
    while True:
        s=q.get()
        print('%s消费了%s'%(name,s))
        time.sleep(random.random())
        q.task_done()	#取完一个数据向生产者发送一个信号,当取完时生产者线程解阻塞
def shengchan(name,q):
    for i in range(3):
        q.put(i)
        print('%s生产了%s'%(name,i))
        time.sleep(random.random())
    q.join()	 #根据生产者发送的信号判断队列中元素个数,取完时解阻塞
if __name__ == '__main__':
    q = Queue()
    t1 = threading.Thread(target=xiaofei, args=('消费者', q))
    t2 = threading.Thread(target=shengchan, args=('生产者', q))
    t1.daemon = True	#将子线程t1的daemon设置为Ture,主线程结束不会等待这个子线程
    print('主线程')
    t1.start()
    t2.start()

在上一次的模型中主线程守护子线程,消费者线程取完生产者生产的数据后一直处于阻塞状态。主线程一直等待不能结束。现在将消费者线程的daemon属性改为True,也就是主线程结束了就不用等待消费者子线程结束。消费者还没有取完数据时生产者线程一直阻塞,而主线程还是会等待生产者线程的,等到消费者线程取完数据后告诉生产者,生产者得到消息后去阻塞结束线程,主线程强行结束消费者子线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值