Python的Quene
模块中提供了同步的,线程安全的队列类,包括 -
- FIFO(先进先出)队列
Queue
, - LIFO(先进后出)队列
LifoQueue
, - 优先级队列
PriorityQueue
这些队列都实现了锁原语
,能够在多线程中直接使用,可以使用列表来实现线程间同步;
初始化Queue()对象时,如果(q=Queue(),若括号中没有指定最大可接受的消息数量,或者数量为负值,那么代表可接受的消息数量没有上限)
队列的方法:
put(self,item,block=True,time=None) #给队列中添加数据
get(self,block=True,timeout=None) #从队列中获取数据
- 如果队列满了,默认一直等待,
- timeout时间设置等待时间,后超过时间会报错,
- block设置为False就会不等待;和put_nowait方法一样
并且超过设置数量或者取出数量后都会报错;
基本FIFO队列(先进先出)
FIFO即First in First Out,先进先出
。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize
是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。
from queue import Queue
q = Queue(5) #创建队列对象
for i in range(5):
q.put(i) #给队列中添加数据
while not q.empty(): #判断是否为空
print(q.get())#从队列中取出数据
运行结果:
0
1
2
3
4
如果队列中数据已满,继续添加数据会报错,同样如果已空,继续取数据也会报错;
from queue import Queue
q = Q