python 队列实现_python中实现队列的queue模块
python中的queue模塊提供了同步的、線程安全的隊列類,包括FIFO(先進先出)的Queue類和LIFO(后進先出,棧結構)LifoQueue類和優先隊列PriorityQueue類,它們都實現了鎖原語(可以理解為原子操作,要么不做,要么就全部做完),解決了python多線程編程中的線程不安全。
隊列與列表的區別
隊列中數據只有一份,取出就沒有了,列表數據取出只是復制了一份
1、初始化一個隊列
Queue(maxsize=0) 或者
LifoQueue(maxsize=0) 或者
PriorityQueue(maxsize=0)
maxsize是個整數,指明了隊列中能存放的數據個數上限。一旦達到上限,插入會導致阻塞,直到隊列中有數據被取出。如果maxsize<=0,隊列大小沒有限制
2、qsize():獲取隊列當前數據的數量
3、empty():判斷隊列是否為空
4、full():判斷隊列是否滿
5、get(block=True, timeout=None):從隊列中取出一個數據
block:是否阻塞調用,
阻塞調用如果隊列為空會一直阻塞直到隊列中放入數據
非阻塞調用時隊列已空拋出Empty異常
如果設置了timeout超時時間并且發生超時拋出Empty異常
get_nowait()為非阻塞取出數據,等同于get(block=False)
6、put(item, block=True, timeout=None):講一個數據放入到隊列中
阻塞調用如果隊列已滿會一直阻塞直到隊列中取出數據
非阻塞調用時隊列已滿拋出Full異常
如果設置了timeout超時時間并且發生超時拋出Full異常
put_nowait(item)為非阻塞取出數據,等同于put(item,block=False)
7、queue.clear():清空隊列
8、task_done():意味著從隊列中取出的一個任務已經完成。每一次調用get()得到一個任務,接下來的task_done()調用告訴隊列該任務已經處理完畢。如果當前一個join()正在阻塞,它將在隊列中的所有任務都處理完時恢復執行(即每一個由put()調用入隊的任務都有一個對應的task_done()調用)。
9、join():阻塞調用線程,直到隊列中的所有任務被處理掉。只要有數據被加入隊列,未完成的任務數就會增加。當調用task_done(),未完成的任務數就會減少。當未完成的任務數降到0,join()解除阻塞。
優先隊列:優先隊列不同于先進先出或后進先出,它是出的規則和進入的順序無關,只和數據的優先級有關,優先級小的數據先出,在put()的時候item需要傳入一個二元元祖,第一個元素是一個正整數,表示優先級,第二個元素是放入的數據,優先級的數字可以重復,同等優先級的數據遵循先進先出的原則。
最后編輯:2020-04-06作者:qingheluo
這個作者貌似有點懶,什么都沒有留下。
總結
以上是生活随笔為你收集整理的python 队列实现_python中实现队列的queue模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL廖雪峰的官方网站
- 下一篇: tensorflow.python.fr