新闻详情

新闻详情

首页 / 资讯中心 / 详情

python的多线程编程之锁

发布时间:2026/9/7 21:27:32来源:尧图网络
python的多线程编程之锁
1、 背景概述上篇文章里, 着重叙说了编程的某些基本方面, 然而其中欠缺有关锁的相关概念, 所以在这篇文章里予以补充。因为存有GIL, 即全局解释器锁, 所以每次获取CPU时, 仅有一个线程能够获取CPU运行权, 并在这方面被视作线程安全。然而在线程运行期间, 它可共享内存, 并具备一致的数据信息内容如此这般, 此时的线程便不再那么安全了。在其中, 需确保数据的准确无误, 而且要由自身来把控数据, 要针对数据施行加锁操作, 并且由自身去释放那一锁。主要目的成了多线程往不太相关方向使用以提升使用效果, 比如爬虫时, 能借助它来抓取, 因线程间不存在需共同处理的数据, 所以抓取时使用它是最佳的 , 也就是为了提高性能与速度。如果需要操作同一份数据那么必须自己保证数据的安全性。要是存在利用多cpu特性的诉求, 那应当采用的是多进程编程, 而非多线程编程, 多进程编程是这样的。2、 利用锁进行同步相同的数据直接看以下的代码#!/usr/bin/env python import time import threading num 0 class MyThread(threading.Thread): def run(self): #lock.acquire() #time.sleep(1) global num num 1 print self.name set num to str(num) #lock.release() #lock threading.RLock() threads [] for i in range(10000): t MyThread() threads.append(t) for i in range(10000): threads[i].start() for i in range(10000): threads[i].join()瞧一瞧上面所呈现的代码, 针对全局变量开展一处修改, 借此使得每个线程获取到的皆是同一份的数据, 由此一来, 极有可能致使数据的计算结果出现不正确的状况, 故而, 必须借助锁去把控数据的正确性。需注意, 于我的机器上展开运行操作时, 均为正确的情形, 进而像是即便不用锁也能够达成, 然而在部分机器上开展模拟操作时, 最终的计算结果却并非正确的。在使用锁的时候只要将注释的代码进行去掉即可使用锁。3、 锁的类型在的模块中提供了三种锁如下所示做锁的操作期间, 于每个线程, 要自行去获取锁, 其后还得自己去释放锁, 不然的话会致使一直处于等待状态, 这也能够称作死锁。4、 事件以线程来做事情时, 能够去断定一个事件已然出现, 接下去促使触发去开展另有别样的事宜, 如此一来能借助event, 像下面呈现的代码那样呢:[rootpython 523]# cat thread_demo.py #!/usr/bin/env python import threading import time import Queue def producter(name,queue,lock): event.clear() print %s start to product... % name queue.put(something) time.sleep(3) print product something event.set() event.wait() def consumer(name,queue,lock): print %s start to consume... % name event.wait() queue.get() print consume something event.set() lock threading.Lock() queue Queue.Queue(10) event threading.Event() threads [] threadsc [] for i in range(1): t threading.Thread(targetproducter,args(kel%s % i,queue,lock)) threads.append(t) for i in range(1): threads[i].start() for i in range(1): t threading.Thread(targetconsumer,args(smile%s % i,queue,lock)) threadsc.append(t) for i in range(1): threadsc[i].start()当运用event之际, clear的意思是把flag设定成false, set的意思是设定成true, wait的意思是在flag为false时, 持续等候, 进而在尚无数据时, 始终进行等待。这种可以做事件的触发。问题于开展此实验之际, 要是线程产生错误, 可不那么能够关闭, 进而唯有杀掉进程才行, 进而能够运用如下命令:killall python把进程给杀掉之际, 线程也一并杀掉, 然而, 线程是没办法被杀死的, 虽然能够使得进程遭受杀害处理。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

Python 装环境为什么这么乱?一张图理清 pip、venv、conda、uv 2026/9/7 21:27:32

Python 装环境为什么这么乱?一张图理清 pip、venv、conda、uv

一开始进行学习之际, 我仅仅是安装个环境便耗费了一下午时间, 纠结于pip究竟是pip3, 添加sudo与否, 为何有人指使我先行创建venv, conda又是类似怎样的一种事物。过后更是晕头转向, 刚刚把它安装妥当,打下第一句pip指令, 便直接遭受一枚红字错误提示。不少人讲, 有关…

阅读更多 →
GraphQL,Grafana和Dash 2026/9/7 21:27:32

GraphQL,Grafana和Dash

要是您属于对着数据科学, 以及数据处理, 或者数据可视化有着兴趣的那类人, 那么这篇文章便是适合您的选择。我肯定您已然听闻过我在上面提到的主题这儿所用的名称。在这篇文章当中, 我会先去详尽地讲述全部这些内容, 之后再开展比较。, and Dash当中的上面那三个, 除了之外呀, …

阅读更多 →
华为MetaERP # 招标代理费、服务费代收代付完整处理> > 核心税法依据:财税〔2016〕36 号:**以委托方名义开具发票代委托方收取的款项,不属于价外费用,不缴增值税**国家税务总.. 2026/9/7 21:27:31

华为MetaERP # 招标代理费、服务费代收代付完整处理> > 核心税法依据:财税〔2016〕36 号:**以委托方名义开具发票代委托方收取的款项,不属于价外费用,不缴增值税**国家税务总..

招标代理费、服务费代收代付完整处理 核心税法依据:财税〔2016〕36 号:以委托方名义开具发票代委托方收取的款项,不属于价外费用,不缴增值税国家税务总...。 关键判断:你单位是否开具发票、是否赚取差价,区…

阅读更多 →

最新相关资讯

奥拉星陶埙BOSS打法全解析:机制应对与阵容搭配攻略 2026/9/7 22:12:45

奥拉星陶埙BOSS打法全解析:机制应对与阵容搭配攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
AI助力学术论文开题:选题推荐与文献精读实战 2026/9/7 22:12:45

AI助力学术论文开题:选题推荐与文献精读实战

1. 论文开题阶段的痛点与破局思路 第一次接触学术论文写作的研究生们,往往会在开题阶段陷入迷茫。我指导过上百位学生的开题报告,发现他们普遍面临三个核心困境: 首先是选题方向的模糊性。很多学生在确定研究方向时,要么选题过于…

阅读更多 →
RFID技术在食品加工产线改造中的应用与优化 2026/9/7 22:12:45

RFID技术在食品加工产线改造中的应用与优化

1. 项目背景与行业痛点 在传统食品加工行业,特别是菠萝罐头这类需要多工序处理的生产线上,一直存在几个核心痛点:原料溯源难、工序衔接效率低、人工记录易出错、质量管控不透明。以菠萝罐头为例,从原料进厂到成品出库要经历清洗、…

阅读更多 →
Java字符串处理全解:String、StringBuilder、StringBuffer、StringJoiner深度对比 2026/9/7 22:12:44

Java字符串处理全解:String、StringBuilder、StringBuffer、StringJoiner深度对比

1. 先看本质:String为什么是Java中最特殊的类搞Java的人,几乎每天都会碰到String。但很多工作了三五年的同学,被问一句“String为什么设计成不可变的”,依然答不到点子上。这篇文章我把String、StringBuilder、StringBuffer、Stri…

阅读更多 →
电商系统商品品牌功能设计与优化实践 2026/9/7 22:12:43

电商系统商品品牌功能设计与优化实践

1. 商品品牌功能的设计初衷与价值定位 在电商系统开发中,商品品牌功能往往是最容易被忽视却至关重要的基础模块。我经历过三个大型电商平台从0到1的搭建过程,发现品牌功能的设计质量直接影响着后续商品管理效率、营销活动精准度和用户体验一致性。 品牌…

阅读更多 →
C++临时对象与prvalue/xvalue深度解析 2026/9/7 22:09:42

C++临时对象与prvalue/xvalue深度解析

1. 临时对象与prvalue/xvalue关系解析在C中,临时对象(Temporary Objects)是编译器在表达式求值过程中自动创建的未命名对象。它们通常出现在函数返回值、类型转换和某些运算过程中。理解临时对象的生命周期及其与值类别(value cat…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞