中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中線程安全隊列Queue的示例分析

發布時間:2022-02-24 13:37:23 來源:億速云 閱讀:160 作者:小新 欄目:開發技術

小編給大家分享一下Python中線程安全隊列Queue的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一、什么是隊列?

像排隊一樣,從頭到尾排成一排,還可以有人繼續往后排隊,這就是隊列。

這里學委想說的是Queue這個類, 它是queue這個內置模塊內的一個類。

import queue
q = queue.Queue(5) #可以傳入參數指定隊列大小
queue.Queue()# 不傳或者給0或者<0的數字則創建一個無限長度的隊列

它提供了很多函數,下面幾個函數,我們使用的比較多:

  • get: 獲取并移除隊頭元素,就是出隊

  • put: 往隊列末尾加入元素,也就是后來者排隊

  • qsize: 獲取隊列的長度

  • empty: 隊列空了,沒有人在排了

  • full: 隊列滿了。

看著比較枯燥,學委畫了下圖展示:

Python中線程安全隊列Queue的示例分析

這個隊列put了3次,依次放入:持續學習,持續開發,我雷學委。隊列長度為3

二、隊列基操 入隊/出隊/查隊列狀態

準備了下面的代碼:

import queue

q = queue.Queue(5)

print("學委粉絲隊列:", q)
print("空隊,學委粉絲隊列大小:", q.qsize())
print("空隊列?", q.empty())
for i in range(5):
    q.put(i)

print("隊列滿了?", q.full())
print("排滿了,學委粉絲隊列大小:", q.qsize())

while not q.empty():
    print("粉絲 %s 出隊點贊!" % q.get())
print("最后,學委粉絲隊列大小:", q.qsize())

這段代碼創建了一個長的為5的隊列。

然后一個循環寫滿隊列,接著再依此出隊,粉絲出隊點贊。

下面是運行效果:

Python中線程安全隊列Queue的示例分析

是不是很簡單。

三、Queue是一個線程安全的類

前面幾篇文章,碰到下面的代碼(反復讀寫共享變量)結果總是出乎依賴!

amount = 100
def transfer(money):
    global amount
    for i in range(100000):
        amount += money

如果我們對隊列進行反復讀寫,會不會出現問題呢?

不妨,寫個代碼驗收一下:

import queue
import threading

xuewei_fans_q = queue.Queue()


def transfer(money):
    for i in range(100000):
        xuewei_fans_q.put(money)
        xuewei_fans_q.get()


# 創建4個任務重復給學委加關注/脫粉(還是希望各位編程的明日之星跟著學習,共同進步!)
t_group = []
for i in range(10):
    t = threading.Thread(target=lambda: transfer(-1))
    t_group.append(t)
    t.start()
    t = threading.Thread(target=lambda: transfer(1))
    t_group.append(t)
    t.start()
    t = threading.Thread(target=lambda: transfer(-1))
    t_group.append(t)
    t.start()
    t = threading.Thread(target=lambda: transfer(1))
    t_group.append(t)
    t.start()

for t in t_group:
    t.join()
print("-" * 16)
print("活躍線程數:", threading.active_count())
print("活躍線程:", threading.current_thread().name)
#反復對隊列進行添加數據,移除數據,隊列最后清零了
print("學委粉絲隊列:", xuewei_fans_q.qsize())

不管運行多少次,隊列(希望是黑粉隊列)都為0元素。

Python中線程安全隊列Queue的示例分析

看完了這篇文章,相信你對“Python中線程安全隊列Queue的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐梓县| 瑞金市| 伽师县| 四子王旗| 化德县| 勃利县| 准格尔旗| 元阳县| 襄垣县| 永顺县| 永靖县| 包头市| 宜章县| 赫章县| 迭部县| 吴桥县| 浦城县| 西充县| 东莞市| 枣阳市| 怀宁县| 临江市| 丰原市| 金平| 贵港市| 苏州市| 准格尔旗| 延长县| 鹤山市| 开鲁县| 翁源县| 阜新市| 丰顺县| 望都县| 新宁县| 陈巴尔虎旗| 松滋市| 刚察县| 襄城县| 广元市| 黄龙县|