python多线程操作列表_详解Python多线程下的list

list 是 Python 常用的几个基本数据类型之一.正常情况下我们会对 list 有增删改查的操作,显然易见不会有任何问题.那么如果我们试着在多线程下操作list 会有问题吗?

多线程下的 list

安全 or 不安全? 不安全!

通常我们说的线程安全是指针对某个数据结构的所有操作都是线程安全,在这种定义下,Python 常用的数据结构 list,dict,str等都是线程不安全的

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

如何判断线程安全呢?

对于线程安全不安全,我们可以通过极端条件下去复现,从而得出结论。比如说判断 list是否线程安全

import threading

import time

# 随意设置 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)

有时候一次运行并不一定就会出错,多次重试之后会出现类似下面的错误

很显然这种操作方式不具有普适性,如果要是欧气太强,说不定会一直不出现异常。

那么出了这种方式,有没有比较简单有效的方法吗?答案是有的

dis

dis 库是 Python 自带的一个库,可以用来分析字节码。这里我们需要有这样的认识,字节码的每一行都是一个原子操作,多线程切换就是以原子操作为单位的,如果一个操作需要两行字节码就说明它是线程不安全的

remove

这里我们先看一下上面 list 的 remove 操作

>>> 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 操作被分成了好几条指令,这就意味着在多线程情况下会出现错乱的情况,试想一下,如果多线程下都去 remove 列表的话,并且不按照顺序,很容易出现问题。

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 也是有几条指令,势必在多线程执行的情况下也会发生交错,但是对于多线程下我们操作append, 我们肯定也不会在乎这个时候 list到顺序问题了,所以我们说它的 append 是线程安全的

参考

以上就是详解Python多线程下的list的详细内容,更多关于Python多线程下的list的资料请关注脚本之家其它相关文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

值得收藏!深度报告解读NB-IoT

来源:物联传媒2019年NB-IoT行业获得了快速发展,用户数有望较2018年提升3倍以上,预计随着2020年基站数的大幅提升,为行业发展提供更进一步的支撑,加速技术成熟度提升,用户数有望保持快速增长。NB-IoT是万物互…

我的世界中国版服务器无限夜视,我的世界服务器游戏技巧 无限夜视的方法

来源:游戏园日期:2019-06-12 04:03:49我的世界服务器游戏技巧 无限夜视的方法。那下面给大家分享的是一些大家可能不知道的游戏技巧,那下面就一起来看看都是些什么技巧吧!对了,里面还有关于服务器无限夜视的方法哦&…

澳洲虚拟主机空间_澳洲空间|澳洲虚拟主机|澳洲主机|澳洲虚拟空间-万纵科技 www.xmwzidc.cn...

澳洲虚拟主机主要应用于外贸美洲的澳洲网站空间:澳洲联邦共和国是拉丁美洲最大的国家,人口数居世界第五,面积居世界第五。其国土位于中南美洲与大西洋之间,面积为世界第五大,仅次于俄罗斯、澳洲、美国与中国,与乌拉圭、…

Oracle锁表查询和解锁方法

数据库操作语句的分类 DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert、delete、updateDCL:数据库控制语言 ,关键字:grant、removeDQL&#xff1a…

揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活

来源:世界人工智能大会 AI 和 5G 与机器人技术结合,正在不断催生新的消费电子品类。AI 解决机器理解世界,以及人机交互的问题。5G 拓展机器人的活动边界,并为机器人提供更大的算力和存储空间(云协作机器人)…

服务器热修复,热修复探究,hotfix,patch

常见场景App打包发出后1.忘了关掉Log输出了2.存在一个业务逻辑触发必崩溃3.某个本地图标忘了替换成新的遇到这些问题,若是Web站点,Mobile站点问题都不大,因为这些具有“持续发布”的特长,但是App的特点是“版本发布”,…

android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框

为什么要改?先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得)再看看下面这个框是不是就要顺眼一点怎么换?先来看看原始的画法:Overridepublic void onAfterRender(CameraFrameData data) {mGLSurfaceVie…

html5 填表 表单 input output 与表单验证

1.<output> Js计算结果 <form οninput"res.value num1.valueAsNumber*num2.valueAsNumber"> <input type"number" id"num1"> X <!-- 没有闭合</input> --> <input type"number" id…

人工智能如何获得知识?

原发&#xff1a;人民论坛学术前沿 2019年21期转自&#xff1a;南京大学哲学系摘要&#xff1a;人构造概念以认识世界&#xff0c;人的认知与人的身体密切相关。计算机是人类心灵的延伸&#xff1b;而人类发明的各种认知用仪器&#xff08;机器&#xff09;是人类感官的延伸&am…

ajax官方api,yangguozhong

AjaxApi下面列出的接口基本都是可以直接使用的&#xff0c;如有问题记得告诉我哦1. 支持的请求方法GET(SELECT)&#xff1a;从服务器取出资源(一项或多项)。POST(CREATE)&#xff1a;在服务器新建一个资源。PUT(UPDATE)&#xff1a;在服务器更新资源(客户端提供改变后的完整资源…

改变网页标签图片(favicon)

<head>里添加如下标签&#xff1a; <link rel"shortcut icon" href"favicon.ico图片路径" type"images/x-icon" /> <link rel"icon" href"favicon.ico图片路径" type"images/x-icon" /> js动态…

报告:美国AI投资占全球56% 中国第二增长最快

来源&#xff1a;小小据外媒报道&#xff0c;由英国政府资助的科技企业家网络Tech Nation日前发布最新报告。报告显示了2015年至2019年各国企业在全球范围内获得的人工智能(AI)领域的投资情况。在这五年期间&#xff0c;美国吸引了全球56%的AI投资&#xff0c;紧随其后的是中国…

服务器图文消息发送规则,群发图文规则 - CurtainRight的个人空间 - OSCHINA - 中文开源技术交流社区...

2、上传图文接口内容信息对比&#xff1a;注意&#xff1a;除了群发图文之外&#xff0c;其余的图文消息都是没有Content&#xff0c;所以都是自己写页面&#xff0c;然后通过URL打开新的页面&#xff0c;那么你的图片就不能访问微信服务器上的图片。因为现在未经授权是不能访问…

rust怎么拆除墙壁指令_人类跌落梦境:城堡怎么过 不少玩家卡在了第六关城堡地图这里...

人类跌落梦境城堡怎么过&#xff1f;随着人类一败涂地手游上线&#xff0c;不少玩家卡在了第六关城堡地图这里。城堡怎么抓灯笼&#xff0c;这个图里风车要怎么用呢&#xff1f;这里就为大家带来人类跌落梦境第六关城堡攻略图解。人类跌落梦境城堡怎么过人类跌落梦境第六关城堡…

【工业智能】人工智能真的无所不能吗?

图1-1956年达特茅斯会议上的那些AI界大神们来源&#xff1a;产业智能官最近几年&#xff0c;随着AlphaGo逐渐干掉了人类的顶级棋手、波士顿“大狗”不断进化的能力使得人们对人工智能充满了期待&#xff0c;人工智能的热潮席卷了大学、企业&#xff0c;春风也吹进了工业这个一直…

Discuz网警过滤关键词库

积累近几年discuz关键词过滤 使用方法&#xff1a;1.进入后台/内容/词语过滤批量添加。2.打开CensorWords.txt&#xff0c;复制里面的文本信息到批量添加的输入框内&#xff0c;点击确定即可。如图&#xff1a; 关键词下载&#xff1a;Keywords.zip转载于:https://www.cnblogs.…

金蝶引出文件到服务器,金蝶K3标准凭证引出并引入

金蝶K3标准凭证引出并引入如下所示&#xff1a;一、首先登录需要引出的帐套&#xff0c;将凭证引出1、财务会计-总账-凭证处理-标准凭证引出2、进入到凭证引出向导界面&#xff0c;点击下一步3、选择引出标准凭证文件存放的位置&#xff0c;及填写名称&#xff0c;点击保存4、点…

中柏平板u盘启动_中柏电脑如何设置BIOS U盘启动

展开全部1、先将U盘插入到电脑中&#xff0c;然后在开机出e69da5e887aa3231313335323631343130323136353331333365666237现第一屏启动信息界面时按键盘上的DEL键&#xff0c;直接进入BIOS。2、进入后按键盘上的右方向键找到“Advanced”选项&#xff0c;最下面项是“USB Config…

AI解读医学影像能力超越人类?BMJ综述:此类研究大多存在偏差

图片来源&#xff1a;Pixabay来源&#xff1a;BMJ翻译&#xff1a;阿金审校&#xff1a;戚译引许多研究宣称&#xff0c;人工智能在解读医学影像方面具备和人类专家同等甚至更强的能力。但是&#xff0c;BMJ 近期发表的一篇综述指出&#xff0c;这些研究质量堪忧&#xff0c;有…

Effective C++ 条款12

复制对象时&#xff0c;勿忘其每个成分 作者在本节条款提醒我们&#xff0c;在多重继承的情况下进行copy或者copy assignment 的operator的编写时&#xff0c;一定要考虑base 类部分数据的初始化后者复制。 对照一下代码&#xff1a; class Cutsomer { …… private:string nam…