线程与进程 queue模块

queue模块的基本用法html

https://www.cnblogs.com/chengd/articles/7778506.htmlpython

模块实现了3种类型的队列,区别在于队列中条目检索的顺序不一样。在FIFO队列中,按照先进先出的顺序检索条目。在LIFO队列中,最后添加的条目最早检索到(操做相似一个栈)。在优先级队列中,条目被保存为有序的(使用heapq模块)而且最小值的条目被最早检索。async

文档地址: https://docs.python.org/3/library/asyncio-queue.htmlspa

谈谈python里面关于任务队列  

 http://www.javashuo.com/article/p-zpyeuhvt-go.html线程

  • 为何要作任务队列

要回答这个问题咱们首先看看在流水线上的案列,若是人的速度很慢,机器的速度比人的速度快不少,就会形成,机器生产的东西没有及时处理,越积越多,形成阻塞,影响生产。code

  • 任务队列的意义:

打个比方若是出现人的速度跟不上机器速度怎么办,这个时候咱们就须要第三方,监管人员(任务队列)把机器生产的东西,放在一个地方,(队列),而后分配给每一个用户,有条不理的执行。htm

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  

按照优先级出  参考上面博客例子blog

18.5.8.3. LifoQueue  

后进先出队列

相关文章
相关标签/搜索