python Queue模块下队列有三种模式
先入先出 queue.Queue
后入先出queue.LifoQueue
优先级队列queue.PriorityQueue
- Queue.qsize()返回当前队列包含的消息数量
- Queue.empty()如果队列为空,返回True,反之False
- Queue.full()如果队列满了,返回True反之False
- Queue.get()获取队列,timeout等待时间,block表示是否等待
- Queue.put()往队列里塞数据 timeout等待时间、block表示是否等待,队列满了等待队列有空余位子在塞入数据
- Queue.get_nowait()相当Queue.get(block=False)
- Queue.put_nowait(item)相当Queue.put(item,block=False)
- Queue.task_done()在完成一项工作之后,使用Queue.tesk_done()方法可以向队列发送一个信号,表示该任务执行完毕
- Queue.join()实际上意味着等到队列中所有的任务(数据)执行完毕之后,再往下,否则一直等待。
Queue
q = queue.Queue(3)
# 队列中添加数据
q.put(1)
q.put(11)
# q.put(2)
# 添加数据不等待队列满了会报错
# q.put(3,block=False)
q.put_nowait(2)
# 获取队列中的数据,先添加的数据会先出来
print(q.get())
print(q.get())
print(q.get())
# 获取数据,等待5秒后还没有数据进行报错
# print(q.get(block=True,timeout=5))
# print(q.get_nowait())
print(q.qsize())
# 队列是否满了
print(q.full())
# 判断队列是否为空
print(q.empty())
# 向队列发送消息,执行完毕
q.task_done()
q.task_done()
q.task_done()
# join 判断队列中的任务是否执行完毕
print(q.join())
LifoQueue
import queue
q2 = queue.LifoQueue()
q2.put(1)
q2.put(11)
q2.put_nowait(2)
print(q2.get())
print(q2.get())
print(q2.get())
# 获取结果为2 11 1,其余方法无变化
PriorityQueue
q3 = queue.PriorityQueue(3)
q3.put((11, 5))
q3.put((1, 2))
q3.put((2, 3))
print(q3.get())
print(q3.get())
print(q3.get())
# 获取结果为(1, 2) (2, 3) (11, 5),其余方法无变化
三种模式的方法调用均相同,只不过返回结果的顺序不同
网友评论