Python threading中lock的使用
# encoding=utf8 import threading import time lock = threading.Lock() l = [] def test1(n): lock.acquire() l.append(n) print(l) lock.release() def test(n): l.append(n) print(l) def main(): for i in range(0, 100): th = threading.Thread(target=test, args=(i,)) th.start()
在多线程中使用lock可以让多个线程在共享资源的时候不会乱,例如代码中创建多个线程,每个线程都往空列表中添加一个数字并打印当前的列表,如果不加锁(test函数没有加锁)可能会出现错误。因为每个线程都在同时往列表l中添加一个数字,然后又可能在同时打印列表l,所以最后的结果看起来会有一些混乱。如果给函数加锁(test1函数加锁),结果就会好很多。因为在test1中每次向列表l中添加数字并打印之前,都先加一把锁,这样可以保证每次只有一个线程可以往列表l中添加数字,而不是同时向列表l里添加数字。
通过上面加锁和不加锁结果的比较可以知道,当多线程需要独占资源时,需要使用锁来控制,防止多个线程同时占用资源而出现其他异常。使用锁的时候时候就调用acquire()方法,告诉其他线程我正在占用资源。使用完资源后释放资源时候就调用release()方法,告诉其他线程,我已经使用完该资源,其他线程可以过来使用了。
原文链接:https://blog.csdn.net/u012067766/article/details/79733801
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器