Python线程下使用锁的技巧分享


Posted in Python onSeptember 13, 2018

使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现异常时可以正常的释放锁。

典型代码如下:

try:
  lock.acquire()
  #关键部分
  ...
finally:
  lock.release()

另外,所有种类的锁还支持上下文管理协议(写起来更简洁):

with语句自动获取锁,并且在控制流离开上下文时自动释放锁。

with lock:
  #关键部分
  ...

此外,编写代码时一般应该避免同时获取多个锁,例如下面就应该尽量避免:

这通知很统一导致应用程序神秘死锁,尽管与集中策略可以避免出现这种情况(如分层锁定),但是最好在编写代码时避免这种嵌套锁。

with lock_A:
  #关键部分
  ...
  with lock_B:
    #B的关键部分
    ...

尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式:即将多线程程序组织为多个独立任务的集合,这些任务之间通过消息队列进行通信,例如下面要讲的queue模块。

Python 相关文章推荐
python通过opencv实现批量剪切图片
Nov 13 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
python pytest进阶之fixture详解
Jun 27 Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 Python
python打造爬虫代理池过程解析
Aug 15 Python
Python笔记之工厂模式
Nov 20 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python如何实现定时器功能
May 28 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
python自动化办公操作PPT的实现
Feb 05 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 #Python
python中字符串内置函数的用法总结
Sep 13 #Python
浅析python继承与多重继承
Sep 13 #Python
Python中分支语句与循环语句实例详解
Sep 13 #Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 #Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 #Python
Python爬虫常用小技巧之设置代理IP
Sep 13 #Python
You might like
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP 源代码压缩小工具
2009/12/22 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
jquery 双色表格实现代码
2009/12/08 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
vue车牌号校验和银行校验实战
2019/01/23 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python中的变量和作用域详解
2016/07/13 Python
python实现list由于numpy array的转换
2018/04/04 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
详解Python中第三方库Faker
2020/09/25 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
Ajax主要包含了哪些技术
2014/06/12 面试题
酒店副总岗位职责
2013/12/24 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
2014年教研室工作总结
2014/12/06 职场文书
爱心募捐感谢信
2015/01/22 职场文书
学生安全责任协议书
2016/03/22 职场文书
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android