queue模块的基本用法
https://www.cnblogs.com/chengd/articles/7778506.html
模块实现了3种类型的队列,区别在于队列中条目检索的顺序不同。在FIFO队列中,按照先进先出的顺序检索条目。在LIFO队列中,最后添加的条目最先检索到(操作类似一个栈)。在优先级队列中,条目被保存为有序的(使用heapq模块)并且最小值的条目被最先检索。
文档地址: https://docs.python.org/3/library/asyncio-queue.html
谈谈python里面关于任务队列
https://www.cnblogs.com/yubenliu/p/8124191.html
- 为什么要做任务队列
要回答这个问题我们首先看看在流水线上的案列,如果人的速度很慢,机器的速度比人的速度快很多,就会造成,机器生产的东西没有及时处理,越积越多,造成阻塞,影响生产。
- 任务队列的意义:
打个比方如果出现人的速度跟不上机器速度怎么办,这个时候我们就需要第三方,监管人员(任务队列)把机器生产的东西,放在一个地方,(队列),然后分配给每个用户,有条不理的执行。
18.5.8.1. Queue 先进先出
import queue q=queue.Queue() q.empty() Out[123]: True #指定队列大小 q=queue.Queue(1) q.put('a') q.full() Out[127]: True q Out[128]: <queue.Queue at 0x1adf0e2ef98> dir(q) Out[129]: ['all_tasks_done', 'empty', 'full', 'get', 'get_nowait', 'join', 'maxsize', 'mutex', 'not_empty', 'not_full', 'put', 'put_nowait', 'qsize', 'queue', 'task_done', 'unfinished_tasks'] q.get() Out[130]: 'a' q.put('b') q.get() Out[132]: 'b' q.qsize() Out[133]: 0
import queue q=queue.Queue() q.put('a') q.put('b') q.qsize() Out[6]: 2 #put(放一个元素进队列) get(从队列中取出一个元素) 先进先出原则 q.get() Out[8]: 'a' #get_nowait(立即取出一个元素,不等待) #占位 #put_nowait(立即放入一个元素,不等待) #占位 #join(阻塞调用线程,直到队列中的所有任务被处理掉) #占位 #task_done(在完成一项任务之后,向任务已经完成的队列发送一个信号) #占位
18.5.8.2. PriorityQueue
按照优先级出 参考上面博客例子
18.5.8.3. LifoQueue
后进先出