##### queue.消息队列 ```python from threading import Thread from queue import Queue class MsgProducer(Thread): # 生产者线程,生产消息放进队列,阻塞至全部放进去 def __init__(self, name: str, count: int, queue: Queue): super().__init__() self.setName(name) self.count = count self.queue = queue def run(self) -> None: for n in range(self.count): msg = f'{self.getName()} - {n}' self.queue.put(msg, block=True) class MsgConsumer(Thread): # 消费者线程,队列提取消息 def __init__(self, name: str, queue: Queue, pth: Thread): super().__init__() self.setName(name) self.queue = queue self.pth = pth def run(self) -> None: while self.pth.is_alive() or not self.queue.empty(): msg = self.queue.get(block=True) print(f'{self.getName()} - {msg}\n', end='') nqueue = Queue(3) threads = list() threads.append(MsgProducer('PA', 5, nqueue)) threads.append(MsgProducer('PB', 5, nqueue)) threads.append(MsgConsumer('CA', nqueue, threads[0])) threads.append(MsgConsumer('CB', nqueue, threads[1])) for t in threads: t.start() for t in threads: t.join() ```