Python线程下使用锁的技巧分享
作者:laozhang 发布时间:2023-10-03 06:05:42
标签:Python,锁
使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现异常时可以正常的释放锁。
典型代码如下:
try:
lock.acquire()
#关键部分
...
finally:
lock.release()
另外,所有种类的锁还支持上下文管理协议(写起来更简洁):
with语句自动获取锁,并且在控制流离开上下文时自动释放锁。
with lock:
#关键部分
...
此外,编写代码时一般应该避免同时获取多个锁,例如下面就应该尽量避免:
这通知很统一导致应用程序神秘死锁,尽管与集中策略可以避免出现这种情况(如分层锁定),但是最好在编写代码时避免这种嵌套锁。
with lock_A:
#关键部分
...
with lock_B:
#B的关键部分
...
尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式:即将多线程程序组织为多个独立任务的集合,这些任务之间通过消息队列进行通信,例如下面要讲的queue模块。
0
投稿
猜你喜欢
- 使用Keras训练好的模型用来直接进行预测,这个时候我们该怎么做呢?【我这里使用的就是一个图片分类网络】现在让我来说说怎么样使用已经训练好的
- Event事件用来控制线程的执行出现e.wait(),就会把这个线程设置为False,就不能执行这个任务;只要有一个线程出现e.set(),
- 我的是shift+] 会打开search everywhere, 很影响操作。怎么关掉?解决:打开设置(settings)找到keymap,
- 前言在前面的分享中,我们制作了一个天眼查 GUI 程序,今天我们在这个的基础上,继续开发新的功能,微博抓取工具,先来看下最终的效果整体的界面
- NMAP是一款开源的网络探测和安全审核的工具,他能够快速的扫描出某个服务器对外暴露的端口信息。是在安全测试领域很常见的一个工具。今天我们用p
- 训练的时候内存一直在增加,最后内存爆满,被迫中断。后来换了一个电脑发现还是这样,考虑是代码的问题。检查才发现我的代码两次存了loss,只有一
- 表格如下:在Unity读取并调用时的代码:而如果想要查看该数据库中的另一个表,不是直接使用Table[1],而是需要更改SELECT * f
- bisect是python内置模块,用于有序序列的插入和查找。查找: bisect(array, item)插入: insort(array
- 检查所使用的语句是否标准 /* 标准SQL和T-SQL之间有很多区别——太多了,这里就不说了。还有,如果你在SQL Server上工作, 那
- 一、什么是NumPyNumpy--Numerical Python,是一个基于Python的可以存储和处理大型矩阵的库。几乎是Python
- 对数学家来说,Python这门语言有着很多吸引他们的地方。举几个例子:对于tuple、lists以及sets等容器的支持,使用与传统数学类似
- 前言许多 Web 应用依赖大量的 I/O (输入/输出) 操作,比如从网站上下载图片、视频等内容;进行网络聊天或者针对后台数据库进行多次查询
- 本文实例讲述了PHP封装的PDO数据库操作类。分享给大家供大家参考,具体如下:<?phpclass DatabaseHandler {
- 目标嗯,我们知道搜索或浏览网站时会有很多精美、漂亮的图片。我们下载的时候,得鼠标一个个下载,而且还翻页。那么,有没有一种方法,可以使用非人工
- 本文环境是python3,采用的是urllib,BeautifulSoup搭建。说下思路,这个项目分为管理器,url管理器,下载器,解析器,
- 锁机制NOLOCK和READPAST的区别。1. 开启一个事务执行插
- 本文为大家分享了Windows下mysql5.7.18安装配置教程,供大家参考,具体内容如下准备:操作系统:win7下64位的zip版本的M
- 前言Go的错误处理这块是日常被大家吐槽较多的地方,我在工作中也观察到一些现象,比较严重的是在各层级的逻辑代码中对错误的处理有些重复。比如,有
- #mkdir /mysqldata2、创建/usr/sbin/bakmysql文件#nano /usr/sbin/bakmysql输入:#!
- 1 使用Flask处理表单什么是表单(Form)? 表单是搜集用户数据信息的各种表单元素的集合区域。它的作用是实现用户和服务器的数据交互。通