線程與進程 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  

後進先出隊列

相關文章
相關標籤/搜索