最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python多線程下的list

 更新時間:2020年07月03日 16:36:00   作者:leetao  
這篇文章主要介紹了Python多線程下的list的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

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

多線程下的 list

安全 or 不安全? 不安全!

通常我們說的線程安全是指針對某個數(shù)據(jù)結(jié)構(gòu)的所有操作都是線程安全,在這種定義下,Python 常用的數(shù)據(jù)結(jié)構(gòu) list,dict,str 等都是線程不安全的

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

如何判斷線程安全呢?

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

import threading
import time

# 隨意設(shè)置 count 的值,值越大錯誤拋出的越快
count = 1000
l = []

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)

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

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

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

dis

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

remove

這里我們先看一下上面 listremove 操作

>>> import dis
>>> def test_remove():
...   a = [1]
...   a.remove(0)
... 
>>> dis.dis(test_remove)
 2      0 LOAD_CONST        1 (1)
       2 BUILD_LIST        1
       4 STORE_FAST        0 (a)

 3      6 LOAD_FAST        0 (a)
       8 LOAD_ATTR        0 (remove)
       10 LOAD_CONST        2 (0)
       12 CALL_FUNCTION      1
       14 POP_TOP
       16 LOAD_CONST        0 (None)
       18 RETURN_VALUE

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

append

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

8     19 LOAD_GLOBAL       0 (a)
      22 LOAD_ATTR        2 (append)
      25 LOAD_CONST        2 (1)
      28 CALL_FUNCTION      1
      31 POP_TOP  

這里顯然,append 也是有幾條指令,勢必在多線程執(zhí)行的情況下也會發(fā)生交錯,但是對于多線程下我們操作 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的詳細內(nèi)容,更多關(guān)于Python多線程下的list的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中運行并行任務(wù)技巧

    Python中運行并行任務(wù)技巧

    這篇文章主要介紹了Python中運行并行任務(wù)技巧,本文給出了兩個示例,并用map來處理并行任務(wù),需要的朋友可以參考下
    2015-02-02
  • python獲取當(dāng)前文件路徑以及父文件路徑的方法

    python獲取當(dāng)前文件路徑以及父文件路徑的方法

    今天小編就為大家分享一篇python獲取當(dāng)前文件路徑以及父文件路徑的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python Celery異步任務(wù)隊列使用方法解析

    Python Celery異步任務(wù)隊列使用方法解析

    這篇文章主要介紹了Python Celery異步任務(wù)隊列使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • python如何禁用print輸出

    python如何禁用print輸出

    這篇文章主要介紹了python如何禁用print輸出問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python實現(xiàn)銀行賬戶系統(tǒng)

    python實現(xiàn)銀行賬戶系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)銀行賬戶系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • python經(jīng)典練習(xí)百題之猴子吃桃三種解法

    python經(jīng)典練習(xí)百題之猴子吃桃三種解法

    這篇文章主要給大家介紹了關(guān)于python經(jīng)典練習(xí)百題之猴子吃桃三種解法的相關(guān)資料, Python猴子吃桃子編程是一個趣味性十足的編程練習(xí),在這個練習(xí)中,我們將要使用Python語言來模擬一只猴子吃桃子的過程,需要的朋友可以參考下
    2023-10-10
  • python dict remove數(shù)組刪除(del,pop)

    python dict remove數(shù)組刪除(del,pop)

    我們在用數(shù)組列表做刪除的時候,可能選擇2個方法,一個是del,一個是pop方法
    2013-03-03
  • python 如何比較兩集合的大小關(guān)系

    python 如何比較兩集合的大小關(guān)系

    這篇文章主要介紹了python 比較兩集合的大小關(guān)系操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python中sys.path.append的作用

    python中sys.path.append的作用

    本文主要介紹了python中sys.path.append的作用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 用python查找統(tǒng)一局域網(wǎng)下ip對應(yīng)的mac地址

    用python查找統(tǒng)一局域網(wǎng)下ip對應(yīng)的mac地址

    這篇文章主要介紹了用python查找統(tǒng)一局域網(wǎng)下ip對應(yīng)的mac地址的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01

最新評論

大竹县| 海盐县| 新乐市| 常山县| 利辛县| 曲阳县| 邹平县| 加查县| 双鸭山市| 香港| 高阳县| 阳泉市| 康保县| 历史| 黑山县| 公安县| 尤溪县| 神池县| 泗阳县| 房山区| 江川县| 新郑市| 晋宁县| 嘉鱼县| 呼伦贝尔市| 辰溪县| 泰宁县| 左贡县| 无极县| 会东县| 宜宾市| 宕昌县| 慈溪市| 外汇| 定边县| 任丘市| 同江市| 平山县| 新绛县| 定州市| 乐清市|