3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個贊
列表本身是線程安全的。在CPython中,GIL可以防止對它們進(jìn)行并發(fā)訪問,而其他實(shí)現(xiàn)則會為其列表實(shí)現(xiàn)使用細(xì)粒度鎖或同步數(shù)據(jù)類型。但是,雖然列表本身不會因同時(shí)訪問的嘗試而損壞,但列表的數(shù)據(jù)不受保護(hù)。例如:
L[0] += 1
如果另一個線程執(zhí)行相同的操作,則不保證實(shí)際將L [0]增加1,因?yàn)?code>+=它不是原子操作。(非常,很少有Python中的操作實(shí)際上是原子的,因?yàn)樗鼈冎械拇蠖鄶?shù)都可以導(dǎo)致調(diào)用任意Python代碼。)您應(yīng)該使用隊(duì)列,因?yàn)槿绻皇褂貌皇鼙Wo(hù)的列表,您可能會因?yàn)榉N族而獲取或刪除錯誤的項(xiàng)目條件。

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個贊
為了澄清托馬斯的優(yōu)秀答案中的一點(diǎn),應(yīng)該提到的append()
是線程安全。
這是因?yàn)橐坏┪覀?em>寫入數(shù)據(jù),就不會擔(dān)心被讀取的數(shù)據(jù)會在同一個地方。該操作不讀取數(shù)據(jù),只將數(shù)據(jù)寫入列表。append()

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個贊
這是一個全面但非詳盡的list
操作示例列表,以及它們是否是線程安全的。希望能得到關(guān)于答案obj in a_list
的語言結(jié)構(gòu)在這里。
添加回答
舉報(bào)