python Queue多线程
时间: 2024-09-07 14:04:27 浏览: 90
详解Python多线程下的list
在Python中,Queue(也称为`queue`模块)是一个非常有用的工具,用于在多线程或多进程之间共享数据。它提供了一种先进先出(FIFO)的数据结构,支持同步操作,确保了数据的一致性和线程安全。
Queue主要有以下几个类:
1. `queue.Queue`:这是最基本的队列,它通过`put()`方法添加元素,通过`get()`方法取出元素,当队列为空时,`get()`会阻塞等待元素的到来。
2. `queue.PriorityQueue`:它实现了优先级队列,元素按其插入时提供的优先级排序。
3. `queue.LifoQueue`:类似Stack,后入先出(LIFO),常用作任务调度。
对于多线程场景,可以创建一个Queue实例,然后在不同的线程中分别使用`put()`和`get()`方法来传递工作单元。由于Queue内部有锁机制,所以在并发访问时能保证线程安全,避免了竞态条件。
例如,一个简单的生产者消费者模型可能会这样设计:
```python
import queue
# 生产者线程
def producer(q):
for i in range(10):
q.put(i)
# 消费者线程
def consumer(q):
while True:
item = q.get()
if item is None: # 表示消费者线程结束信号
break
print(f"Consuming {item}")
q = queue.Queue()
producer_thread = threading.Thread(target=producer, args=(q,))
consumer_thread = threading.Thread(target=consumer, args=(q,))
producer_thread.start()
# 等待一段时间让生产者完成工作
time.sleep(2)
# 发送结束信号给消费者
q.put(None)
producer_thread.join()
print("Both threads finished.")
```
阅读全文