电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

詳解Python多線程下的list

瀏覽:5日期: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 編程
相關文章:
主站蜘蛛池模板: 三效蒸发器_多效蒸发器价格_四效三效蒸发器厂家-青岛康景辉 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 商秀—企业短视频代运营_抖音企业号托管| 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 金属雕花板_厂家直销_价格低-山东慧诚建筑材料有限公司 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 硬度计,金相磨抛机_厂家-莱州华煜众信试验仪器有限公司 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 家德利门业,家居安全门,别墅大门 - 安徽家德利门业有限公司 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 余姚生活网_余姚论坛_余姚市综合门户网站 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 黑田精工电磁阀-CAMMOZI气缸-ROSS电磁-上海茂硕机械设备有限公司 | 中药二氧化硫测定仪,食品二氧化硫测定仪|俊腾百科 | 耐火砖厂家,异形耐火砖-山东瑞耐耐火材料厂| 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 |