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


本文摘自php中文网,作者不言,侵删。

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

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

典型代码如下:

1

2

3

4

5

6

try:

    lock.acquire()

    #关键部分

    ...

finally:

    lock.release()

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

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

1

2

3

with lock:

    #关键部分

    ...

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

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

1

2

3

4

5

6

with lock_A:

    #关键部分

    ...

    with lock_B:

        #B的关键部分

        ...

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

相关推荐:

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

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

以上就是Python线程下使用锁该注意的地方的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python 循环语句之 while,for语句详解

解析Python实现mq消息队列以及消息队列的优点

web自动化测试(二)selenium 3启动ie, firefox,chrome代码示例

Python图像处理的基础和opencv的入门函数

Python中pop()函数如何使用

Python开发安卓app可行吗

Python中(urlparse)模板的使用详解

Python中fd()是什么

Python操作mongodb的9个步骤

Python如何安装包vtk

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...