亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

詳解Python多線程下的list

瀏覽:2日期:2022-07-18 17:09:42

list 是 Python 常用的幾個基本數據類型之一.正常情況下我們會對 list 有增刪改查的操作,顯然易見不會有任何問題.那么如果我們試著在多線程下操作list 會有問題嗎?

多線程下的 list

安全 or 不安全? 不安全!

通常我們說的線程安全是指針對某個數據結構的所有操作都是線程安全,在這種定義下,Python 常用的數據結構 list,dict,str 等都是線程不安全的

盡管多線程下的 list 是線程不安全的,但是在 append 的操作下是它又是線程安全的.

如何判斷線程安全呢?

對于線程安全不安全,我們可以通過極端條件下去復現,從而得出結論。比如說判斷 list 是否線程安全

import threadingimport time# 隨意設置 count 的值,值越大錯誤拋出的越快count = 1000l = []def add(): for i in range(count): l.append(i) time.sleep(0.0001)def remove(): for i in range(count): l.remove(i) time.sleep(0.0001)t1 = threading.Thread(target=add)t2 = threading.Thread(target=remove)t1.start()t2.start()t1.join()t2.join()print(l)

有時候一次運行并不一定就會出錯,多次重試之后會出現類似下面的錯誤

詳解Python多線程下的list

很顯然這種操作方式不具有普適性,如果要是歐氣太強,說不定會一直不出現異常。

那么出了這種方式,有沒有比較簡單有效的方法嗎?答案是有的

dis

dis 庫是 Python 自帶的一個庫,可以用來分析字節碼。這里我們需要有這樣的認識,字節碼的每一行都是一個原子操作,多線程切換就是以原子操作為單位的,如果一個操作需要兩行字節碼就說明它是線程不安全的

remove

這里我們先看一下上面 list 的 remove 操作

>>> import dis>>> def test_remove():... a = [1]... a.remove(0)... >>> dis.dis(test_remove) 2 0 LOAD_CONST1 (1) 2 BUILD_LIST1 4 STORE_FAST0 (a) 3 6 LOAD_FAST0 (a) 8 LOAD_ATTR0 (remove) 10 LOAD_CONST2 (0) 12 CALL_FUNCTION 1 14 POP_TOP 16 LOAD_CONST0 (None) 18 RETURN_VALUE

從上面不難看出,整個 remove 操作被分成了好幾條指令,這就意味著在多線程情況下會出現錯亂的情況,試想一下,如果多線程下都去 remove 列表的話,并且不按照順序,很容易出現問題。

append

在最上面我們說到,list 的 append 操作是線程安全的,那么究竟是為什么呢?我們同樣來用 dis 查看一下

8 19 LOAD_GLOBAL 0 (a) 22 LOAD_ATTR2 (append) 25 LOAD_CONST2 (1) 28 CALL_FUNCTION 1 31 POP_TOP

這里顯然,append 也是有幾條指令,勢必在多線程執行的情況下也會發生交錯,但是對于多線程下我們操作 append, 我們肯定也不會在乎這個時候 list 到順序問題了,所以我們說它的 append 是線程安全的

參考

https://stackoverflow.com/questions/6319207/are-lists-thread-safe/19728536#19728536

https://docs.python.org/3/faq/library.html#what-kinds-of-global-value-mutation-are-thread-safe

以上就是詳解Python多線程下的list的詳細內容,更多關于Python多線程下的list的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 可以免费看黄色的网站 | 免费看成人毛片 | 成人a毛片手机免费播放 | 亚洲精品国产专区一区 | 九九精彩视频在线观看视频 | 欧美成人片在线 | 国产99视频精品免视看7 | 欧美性色黄大片在线观看 | 欧美成人毛片 | 三级手机在线观看 | 怡红院亚洲红怡院天堂麻豆 | 亚洲不卡影院 | 日本在线视频不卡 | 成人手机在线 | 久久精品国产亚洲网站 | 欧美久久久久久久一区二区三区 | 欧美日韩在线视频播放 | 久久综合久久精品 | 成人久久视频 | 日本黄页网站在线观看 | 日韩精品亚洲人成在线观看 | 黄色三级毛片网站 | 久久精品国产免费看久久精品 | 性色a v 一区 | 亚洲精品人成网线在线 | 国产成人精品三级在线 | 亚洲精品精品一区 | 欧美一级在线看 | 国产欧美日韩精品高清二区综合区 | 国产专区一va亚洲v天堂 | 在线精品播放 | 日本aaa成人毛片 | 精品国产一区二区在线观看 | 男女性高爱潮免费的国产 | 一个人看的免费观看日本视频www | 国产欧美日本在线观看 | 日韩在线手机看片免费看 | 一级毛片牲交大片 | 久久www免费人成精品 | 亚洲 自拍 另类 欧美 综合 | 日韩国产在线 |