Python线程下使用锁该注意的地方

不言
发布: 2018-09-11 16:42:34
原创
1580 人浏览过

本篇文章给大家带来的内容是关于Python线程下使用锁该注意的地方,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

典型代码如下:

try:
    lock.acquire()
    #关键部分
    ...
finally:
    lock.release()
登录后复制

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

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

with lock:
    #关键部分
    ...
登录后复制

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

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

with lock_A:
    #关键部分
    ...
    with lock_B:
        #B的关键部分
        ...
登录后复制

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

相关推荐:

举例讲解Python编程中对线程锁的使用

如何使用python线程锁(实例解析)

以上是Python线程下使用锁该注意的地方的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板