Python中如何实现阻塞队列
在Python中实现阻塞队列可以使用queue模块中的Queue类来实现。Queue类本身已经实现了阻塞功能,当队列为空时,调用get方法会被阻塞,直到队列中有新的数据进入。同样,当队列已满时,调用put方法也会被阻塞,直到队列中有空位可以存放新的数据。
以下是一个演示阻塞队列的示例代码,其中使用字符串“pidancode.com”、“皮蛋编程”作为数据:
import queue import threading class BlockingQueue: def __init__(self, maxsize=10): self.queue = queue.Queue(maxsize=maxsize) def put(self, item): self.queue.put(item) def get(self): return self.queue.get() def task(self, name): while True: item = self.get() print(f"{name} get: {item}") def run(self): t1 = threading.Thread(target=self.task, args=("worker1",)) t2 = threading.Thread(target=self.task, args=("worker2",)) t1.start() t2.start() t1.join() t2.join() if __name__ == "__main__": bq = BlockingQueue(maxsize=5) for i in range(10): bq.put("pidancode.com") bq.put("皮蛋编程") bq.run()
在这个示例代码中,我们首先定义了一个BlockingQueue类,它包装了Queue类,并创建了一个线程任务,每个任务不断地从阻塞队列中获取数据,直到队列为空。在主程序中,我们向队列中放置了10个“pidancode.com”和“皮蛋编程”的字符串,由于队列大小为5,因此前5个字符串可以直接被加入队列中。当队列已满时,后续的put操作会被阻塞,直到队列中有空位。在两个线程不断地从队列中获取数据的同时,主程序被阻塞等待两个线程结束,结束后程序退出。
相关文章