经典模型-生产者消费者模型
在生产者/消费者模型中,生产者Producer负责生产数据,而消费者Consumer负责使用数据。多个生产者线程会在同一时间运行,生产数据,并放到内存中一个共享的区域(Queue)。期间,多个消费者线程读取内存共享区,消费里面的数据
解释:
1、我们开始了一个生产者线程(下称生产者)和一个消费者线程(下称消费者)。
2、生产者不停地添加(数据)到队列,而消费者不停地消耗。
3、由于队列是一个共享变量,我们把它放到lock程序块内,以防发生竞态条件。
4、在某一时间点,消费者把所有东西消耗完毕而生产者还在挂起(sleep)。消费者尝试继续进行消耗,但此时队列为空,出现IndexError异常。
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import threading import time import Queue import random q=Queue.Queue() lock=threading.RLock() def Product(name): for i in range(20): lock.acuqire() q.put(i) print "------",(name,i) lock.release() time.sleep(random.randrange(4)) def Consumer(name): count=0 while count<20: lock.acuqire() data=q.get() count+=1 print "......",(name,data) lock.release() time.sleep(random.randrange(4)) p=threading.Thread(target=Product,args=('aaa',)) c=threading.Thread(target=Consumer,args=('bbb',)) p.start() c.start()