queue模块的使用

Posted marklijian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了queue模块的使用相关的知识,希望对你有一定的参考价值。

queue模块

from queue import Queue,LifoQueue,PriorityQueue


# 队列——先进先出

que = Queue(5)

# 堆栈——先进后出

que = LifoQueue(5)

# 优先级队列——优先级低的先出

# que = PriorityQueue(5)


que.put('任意数据类型')
que.put(['任意数据类型(列表)'])
que.put('任意数据类型(字典)':'aaaa')
que.put('这是集合')
que.put(("元组也行",))

# 优先级队列专用(因为put里是元组,且第一个元素是可以互相比较的数据类型,这里默认用整型)
# que.put((2,'任意数据类型'))
# que.put((10,['任意数据类型(列表)']))
# que.put((5,'任意数据类型(字典)':'aaaa'))
# que.put((1,'这是集合'))
# que.put((100,("元组也行",)))

print(que.get())
que.task_done()

print(que.get())
que.task_done()

print(que.get())
que.task_done()

print(que.get())
que.task_done()

print(que.get())
que.task_done()

que.join()

Queue()队列

队列,先进先出

主要用法

  • put()
  • get()
  • put/get的默认参数
    • block
      • 默认为true
        • 当队列满了,再put就会进入等待状态
        • 当队列空了,再get就会进入等待状态
      • 当为False时
        • 当队列满了,再put就会抛错
        • 当队列空了,再get就会抛错
    • timeout
      • 只有当block为True时,才有意义
      • 设置等待状态所持续的时间,
        超出时间一样会报错

join()用法

  • 一个acquire()就要task_done()一次
  • 否则join()就阻塞住当前线程

LifoQueue()栈

栈,先进后出

主要用法

  • put()
  • get()

PriorityQueue()优先级队列

优先级队列,与优先级有关

主要用法

  • put()
  • get()

根据优先级来存放数据,基于堆,这个类基于的是大堆

即优先级低的先出来

都可以使用join()方法

重点:这里的每一种容器的put方法get时都要使用相同数量的task_down()方法

否则,join()方法会一直阻塞在这

传送门

XMind: ZEN - Trial Version

以上是关于queue模块的使用的主要内容,如果未能解决你的问题,请参考以下文章

[python模块]队列queue

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

Python之queue模块

使用Queue模块实现线程间通讯

后台程序处理 python threading - queue 模块使用

Python队列queue模块