from threading import Thread, Event from queue import Queue import time import random class producer(Thread): def init(self, queue): Thread.init(self) self.queue = queue
代码语言:javascript复制def run(self) :
for i in range(10):
item = random.randint(0, 256)
self.queue.put(item)
print('Producer notify: item N° %d appended to queue by %s' % (item, self.name))
time.sleep(1)
class consumer(Thread): def init(self, queue): Thread.init(self) self.queue = queue
代码语言:javascript复制def run(self):
while True:
item = self.queue.get()
print('Consumer notify : %d popped from queue by %s' % (item, self.name))
self.queue.task_done()
if name == 'main': queue = Queue() t1 = producer(queue) t2 = consumer(queue) t3 = consumer(queue) t4 = consumer(queue) t1.start() t2.start() t3.start() t4.start() t1.join() t2.join() t3.join() t4.join()
//Queue.put(item [,block[, timeout]]) //如果 block 为 True , timeout 为 None (这也是默认的选项,本例中使用默认选项),那么可能会阻塞掉,直到出现可用的位置。如果 timeout 是正整数,那么阻塞直到这个时间,就会抛出一个异常。 //如果 block 为 False ,如果队列有闲置那么会立即插入,否则就立即抛出异常( timeout 将会被忽略)。本例中, put() 检查队列是否已满,然后调用 wait() 开始等待。 //消费者使用 Queue.get([block[, timeout]]) 从队列中取回数据,queue内部也会经过锁的处理。如果队列为空,消费者阻塞。