Python线程下使用锁的技巧分享
作者:laozhang 时间:2023-10-03 06:05:42
使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现异常时可以正常的释放锁。
典型代码如下:
try:
lock.acquire()
#关键部分
...
finally:
lock.release()
另外,所有种类的锁还支持上下文管理协议(写起来更简洁):
with语句自动获取锁,并且在控制流离开上下文时自动释放锁。
with lock:
#关键部分
...
此外,编写代码时一般应该避免同时获取多个锁,例如下面就应该尽量避免:
这通知很统一导致应用程序神秘死锁,尽管与集中策略可以避免出现这种情况(如分层锁定),但是最好在编写代码时避免这种嵌套锁。
with lock_A:
#关键部分
...
with lock_B:
#B的关键部分
...
尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式:即将多线程程序组织为多个独立任务的集合,这些任务之间通过消息队列进行通信,例如下面要讲的queue模块。
标签:Python,锁
0
投稿
猜你喜欢
ASP缓存类 【先锋缓存类】Ver2004
2009-01-05 12:28:00
对python 树状嵌套结构的实现思路详解
2022-02-04 15:45:06
Django模板语言 Tags使用详解
2022-09-27 23:37:35
在数据库中自动生成编号的实现方法分享
2011-11-03 16:55:24
python神经网络tensorflow利用训练好的模型进行预测
2022-09-27 17:33:17
python3将视频流保存为本地视频文件
2023-07-26 12:14:45
PyQt5每天必学之单行文本框
2022-09-12 06:29:35
php开启openssl的方法
2023-11-14 06:52:51
Python pip 常用命令汇总
2023-06-10 06:11:38
Tensorflow中TFRecord生成与读取的实现
2023-05-02 07:21:20
MySQL配置文件my.cnf中文版
2011-09-30 11:06:15
Python创建文件和追加文件内容实例
2021-03-15 04:38:09
基于Google的Python编码规范标准
2023-02-21 12:40:38
vue实现简单的登录弹出框
2024-05-21 10:30:12
mysqldumpslow用法示例(慢查询)
2024-01-15 22:42:03
PyQt5笔记之弹出窗口大全
2021-06-30 06:53:14
Python paramiko 模块浅谈与SSH主要功能模拟解析
2023-10-01 11:06:28
python实现kmp算法的实例代码
2022-07-19 15:07:16
PHP实现手机归属地查询API接口实现代码
2023-11-14 09:10:33
python中的list字符串元素排序
2022-03-14 12:27:14