当前位置: 首页 > news >正文

python中的进程锁与线程锁

在Python中,线程和进程使用锁的机制有所不同,需分别通过threadingmultiprocessing模块实现。以下是具体用法及注意事项:


一、线程锁(Thread Lock)

  1. 基本用法
    线程锁用于多线程环境下保护共享资源,防止数据竞争。核心类是threading.Lock,通过acquire()release()方法控制锁的获取与释放,或使用上下文管理器简化操作。
import threadinglock = threading.Lock()
shared_data = 0def increment():global shared_datawith lock:  # 自动管理锁的获取和释放shared_data += 1# 创建多个线程
threads = [threading.Thread(target=increment) for _ in range(10)]
for t in threads:t.start()
for t in threads:t.join()
print(shared_data)  # 输出结果为10
  1. 高级锁类型
    • 可重入锁(RLock):允许同一线程多次获取锁,避免死锁,适用于递归场景。
rlock = threading.RLock()
with rlock:# 可嵌套获取同一锁with rlock:# 执行操作

• 信号量(Semaphore):限制并发线程数,例如控制数据库连接池的最大连接数。

sem = threading.BoundedSemaphore(3)  # 最多允许3个线程同时运行
with sem:# 访问资源
  1. 注意事项
    • 避免死锁:确保锁的获取顺序一致,使用try...finallywith语句保证锁释放。

• 减少锁持有时间:仅对共享资源操作加锁,避免长时间阻塞其他线程。


二、进程锁(Process Lock)

  1. 基本用法
    进程锁通过multiprocessing.Lock实现,用法与线程锁类似,但需配合进程间共享内存(如multiprocessing.Value)。
import multiprocessinglock = multiprocessing.Lock()
shared_counter = multiprocessing.Value('i', 0)def increment(counter, lock):for _ in range(1000):with lock:counter.value += 1# 创建进程
processes = [multiprocessing.Process(target=increment, args=(shared_counter, lock)) for _ in range(4)]
for p in processes:p.start()
for p in processes:p.join()
print(shared_counter.value)  # 输出4000
  1. 进程锁与线程锁的区别
    • 作用范围:线程锁仅在同一进程的线程间生效,进程锁用于跨进程同步。

• 共享资源管理:进程间共享数据需使用multiprocessing模块的特殊数据结构(如ValueArray)。

相关文章:

  • 关于索引的使用
  • pe文件二进制解析(用c/c++解析一个二进制pe文件)
  • HTTP协议解析:Session/Cookie机制与HTTPS加密体系的技术演进(二)
  • 基于STM32、HAL库的PCM3060PWR 音频接口芯片驱动程序设计
  • UDP协议详细讲解及C++代码实例
  • 转发多台px4仿真UDP数据到地面站
  • KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache
  • sqlserver免费版每天备份数据库
  • 【计算机网络】3数据链路层②
  • 数据结构(一) 绪论
  • 进程与线程:07 CPU调度策略
  • 黑马Java基础笔记-10
  • Spring框架请求注解
  • Java键盘鼠标事件监听器(鼠标)MouseListener、MouseMotionListener、MouseWheelListener和(键盘)keyListener
  • 科学养生,开启健康生活
  • Spring Security与SaToken的对比
  • 机试刷题:进制转换3
  • 蓝桥杯题库经典题型
  • 【Linux】操作系统入门:冯诺依曼体系结构
  • Python作业练习3
  • 视频|王弘治:王太后,“先天宫斗圣体”?
  • 重庆发布经济犯罪案件接报警电子地图,企业可查询导航属地经侦服务点
  • 共情场域与可持续发展——关于博物馆、美术馆运营的新思考
  • 国家林业和草原局原党组成员、副局长李春良接受审查调查
  • 智能手表眼镜等存泄密隐患,国安部提醒:严禁在涉密场所使用
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点