python 线程通信queue

2022-05-13 08:42:51 浏览数 (1)

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内部也会经过锁的处理。如果队列为空,消费者阻塞。

0 人点赞