python+queue模块
时间: 2023-12-24 13:04:12 浏览: 87
Python中的queue模块提供了多种队列实现,包括FIFO(先进先出)队列、LIFO(后进先出)队列和优先级队列。这些队列都是线程安全的,可以在多线程环境下使用。
queue模块中最常用的类是Queue类,它实现了一个FIFO队列。Queue类提供了以下方法:
1. put(item, block=True, timeout=None):将item放入队列中。如果block为True(默认值),并且队列已满,则阻塞直到有空间可用。如果timeout不为None,则阻塞timeout秒,如果还是没有空间可用,则抛出Queue.Full异常。
2. get(block=True, timeout=None):从队列中取出一个元素并返回。如果block为True(默认值),并且队列为空,则阻塞直到有元素可用。如果timeout不为None,则阻塞timeout秒,如果还是没有元素可用,则抛出Queue.Empty异常。
3. qsize():返回队列中的元素个数。
4. empty():如果队列为空,返回True,否则返回False。
5. full():如果队列已满,返回True,否则返回False。
除了Queue类,queue模块还提供了LifoQueue类和PriorityQueue类。LifoQueue类实现了一个LIFO队列,PriorityQueue类实现了一个优先级队列,其中元素按照优先级从小到大排序。
下面是一个使用Queue类的例子:
```python
import queue
import threading
def worker(q):
while True:
item = q.get()
if item is None:
break
print(item)
q.task_done()
q = queue.Queue()
num_worker_threads = 4
threads = []
for i in range(num_worker_threads):
t = threading.Thread(target=worker, args=(q,))
t.start()
threads.append(t)
for item in range(20):
q.put(item)
q.join()
for i in range(num_worker_threads):
q.put(None)
for t in threads:
t.join()
```
这个例子中,我们创建了一个Queue对象,并启动了4个线程来处理队列中的元素。主线程向队列中放入20个元素,然后等待队列中的所有元素都被处理完毕。最后,主线程向队列中放入4个None元素,以通知工作线程退出。
阅读全文