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

 更新时间:2018年09月13日 15:05:29   投稿:laozhang  
本篇文章给大家分享了Python线程下使用锁需要注意的地方,有兴趣的朋友们可以学习参考下。

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

典型代码如下:

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

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

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

with lock:
  #关键部分
  ...

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

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

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

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

相关文章

  • python框架flask表单实现详解

    python框架flask表单实现详解

    这篇文章主要介绍了python框架flask表单实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python 异步之生成器示例详解

    Python 异步之生成器示例详解

    这篇文章主要为大家介绍了Python 异步之生成器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Python selenium get_cookies获取cookie不全的解决方案

    Python selenium get_cookies获取cookie不全的解决方案

    之前使用爬虫时最让我头疼的就是cookie失效的问题了,下面这篇文章主要给大家介绍了关于Python selenium get_cookies获取cookie不全的解决方案,需要的朋友可以参考下
    2022-10-10
  • Python的装饰器模式与面向切面编程详解

    Python的装饰器模式与面向切面编程详解

    这篇文章主要介绍了Python的装饰器模式与面向切面编程详解,概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能,本文详细了装饰器模式的方方面面,然后引出面向切面编程知识,需要的朋友可以参考下
    2015-06-06
  • 一篇文章带你了解几个好用的Python技巧

    一篇文章带你了解几个好用的Python技巧

    这篇文章主要介绍了几个Python小技巧,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • python语法学习之super(),继承与派生

    python语法学习之super(),继承与派生

    这篇文章主要介绍了python语法学习之super(),继承与派生,继承是一种创建新类的方式,具体的super()派生的相关详细内容需要的小伙伴可以参考下面文章内容
    2022-05-05
  • Python实现循环语句的方式分享

    Python实现循环语句的方式分享

    这篇文章主要为大家详细介绍了Python中实现循环语句的常用方式,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-05-05
  • 浅谈keras使用预训练模型vgg16分类,损失和准确度不变

    浅谈keras使用预训练模型vgg16分类,损失和准确度不变

    这篇文章主要介绍了浅谈keras使用预训练模型vgg16分类,损失和准确度不变,具有很好的参考价值,希望对大家有所帮助。一起跟随小编小编过来看看吧
    2020-07-07
  • 解读python logging模块的使用方法

    解读python logging模块的使用方法

    logging模块是Python内置的标准模块,这篇文章主要介绍了解读python logging模块的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 适合Python项目的五大SQL连接器

    适合Python项目的五大SQL连接器

    这篇文章,将要介绍当前流行的、适合大多数Python程序员的、五大Python SQL数据库连接器,并讨论它们安装和各种的优缺点。需要的喷朋友可以参考下面文章的具体内容
    2021-09-09

最新评论