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
  • asp之家 网络编程 m.aspxhome.com