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模块。

相关文章

  • python3的输入方式及多组输入方法

    python3的输入方式及多组输入方法

    今天小编就为大家分享一篇python3的输入方式及多组输入方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python 读取竖线分隔符的文本方法

    python 读取竖线分隔符的文本方法

    今天小编就为大家分享一篇python 读取竖线分隔符的文本方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python制作websocket服务器实例分享

    python制作websocket服务器实例分享

    websocket是一个浏览器和服务器通信的新的协议,websocket则和一般的socket一样,使得浏览器和服务器建立了一个双工的通道。今天我们就来详细探讨下使用Python实现websocket服务器的具体方法
    2016-11-11
  • 对python添加模块路径的三种方法总结

    对python添加模块路径的三种方法总结

    今天小编就为大家分享一篇对python添加模块路径的三种方法总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python入门篇之数字

    Python入门篇之数字

    本文的主题是 Python 中的数字。会详细介绍每一种数字类型,它们适用的各种运算符, 以及用于处理数字的内建函数。在文章的末尾, 简单介绍了几个标准库中用于处理数字的模块。
    2014-10-10
  • python实现的二叉树算法和kmp算法实例

    python实现的二叉树算法和kmp算法实例

    最近重温数据结构,又用python,所以就用python重新写了数据结构的一些东西,以下是二叉树的python写法
    2014-04-04
  • Python3 入门教程 简单但比较不错

    Python3 入门教程 简单但比较不错

    Python已经是3.1版本了,与时俱进更新教程.2.5或2.6请看上一篇文章。
    2009-11-11
  • python爬虫(入门教程、视频教程)

    python爬虫(入门教程、视频教程)

    本文是一篇关于python爬虫的知识学习教程,并且给大家解答了学习了python爬虫怎么挣钱这个很多程序员疑惑的问题,如果你对这方面的知识也感兴趣,一起深入学习一下吧。
    2018-01-01
  • Python 查找字符在字符串中的位置实例

    Python 查找字符在字符串中的位置实例

    下面小编就为大家分享一篇Python 查找字符在字符串中的位置实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python实现栅栏加解密 支持密钥加密

    python实现栅栏加解密 支持密钥加密

    这篇文章主要为大家详细介绍了python实现栅栏加解密,支持密钥加密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03

最新评论