queue模块实现了各种多生产者-多消费者队列,可用于在执行的多个线程之间安全地交换信息。
queue模块定了3种不同的队列类。
Queue([maxsize])
创建一个FIFO先进先出队列。maxsize是队列中可以放入的项目的最大值。如果省略maxsize或将它置为0,队列大小将是无限大。
LifoQueue([maxsize])
创建一个LIFO后进先出队列,也叫做栈。
PriorityQueue([maxsize])
创建一个优先级队列,其中项目按照优先级从低到高依次排列。使用这种队列时,项目应该是(priority, data)形式的元组,其中priority是一个数字。
队列类的实例q具有以下方法:
使用队列一般可以简化多线程的程序。例如,可以使用共享队列将线程连接在一起,而不必依赖于必须有锁定保护的共享状态。在这种模型中,工作者线程一般充当数据的使用者。
import threading
from queue import Queueclass WorkerThread(threading.Thread):def __init__(self, *args, **kwargs):threading.Thread.__init__(self, *args, **kwargs)self.input_queue = Queue()def send(self, item):self.input_queue.put(item)def close(self):self.input_queue.put(None)self.input_queue.join()def run(self):while True:item = self.input_queue.get()if item is None:break# 处理项目print(item)self.input_queue.task_done()self.input_queue.task_done()returnw = WorkerThread()
w.start()
w.send("hello")
w.send("world")
w.close()