python多線程----queue模塊

#首先要知道,python的列表是不安全的,
#因爲它不符合原子性,對列表中的某個元素進行操作有兩部,先取到元素,然後改變值


# queue模塊
# 首先說一下queue模塊
# 這個模塊其實就是實現了一個叫隊列的數據結構,但是它是線程安全的
# 而且嚴格來說不只是隊列,還能實現棧.

import queue

# 先進先出,也就是傳統意義上的隊列,也就是滑滑梯
q = queue.Queue(2)  # 在構造的時候可以給定隊列的最大容量,不給的話默認是沒有上限
"""
如果隊列當前已滿且 block 爲 True,put() 方法就使調用線程暫停,直到空出一個數據單元。
如果block爲 False,put 方法將引發 Full 異常
"""
q.put(1)
q.put(2)
"""
調用隊列對象的 get() 方法從隊頭刪除並返回一個項目。可選參數爲 block,默認爲 True。
如果隊列滿了且 block 爲 True,get() 就使調用線程暫停,直至有項目可用。
如果隊列滿了且 block 爲 False,隊列將引發 Empty 異常。
常用的方法是先判斷一個隊列是否爲空,如果不爲空則取值。"""
print(q.get())
print(q.qsize())  # 注意,在取出一個元素後,隊列顯示爲只剩下一個元素了
# 後進先出隊列,也就是填彈夾
q1 = queue.LifoQueue()
q1.put(1)
q1.put(2)
print(q1.get())

#full()和empty()判斷隊列是否已滿/空了

# 優先級隊列
# 當優先級相同時,按放數據順序取數據
q2 = queue.PriorityQueue()
q2.put((1, "本元素優先級爲1"))
q2.put((2, "本元素優先級爲2"))
print(q2.get())  # (1, '本元素優先級爲1')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章