资讯专栏INFORMATION COLUMN

Python线程专题8:使用锁的注意事项

phoenixsky / 1120人阅读

摘要:上一篇文章线程专题条件变量下一篇文章线程专题线程终止与挂起使用诸如之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现异常时可以正常的释放锁。

上一篇文章:Python线程专题7:条件变量
下一篇文章:Python线程专题9:线程终止与挂起

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

典型代码如下:

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

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

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

with lock:
    #关键部分
    ...

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42417.html

相关文章

  • Python线程专题纵览篇

    摘要:上一篇文章进程专题完结篇多进程处理的一般建议下一篇文章线程专题多线程使用的必要性进程线程进程能够完成多任务,比如在一个电脑上可以运行多个软件。由于占用资源少,也使得多线程程序并发比较高。 上一篇文章:Python进程专题完结篇:多进程处理的一般建议下一篇文章:Python线程专题1:多线程使用的必要性 进程VS线程 进程:能够完成多任务,比如在一个电脑上可以运行多个软件。线程:也能够...

    张红新 评论0 收藏0
  • Python线程专题7:条件变量

    摘要:上一篇文章线程专题事件下一篇文章线程专题使用锁的注意事项条件变量时构建在另一个锁上的同步原语,当需要线程关注特定的状态变化或事件发生时将使用这个锁。 上一篇文章:Python线程专题6:事件下一篇文章:Python线程专题8:使用锁的注意事项 条件变量时构建在另一个锁上的同步原语,当需要线程关注特定的状态变化或事件发生时将使用这个锁。典型的用法是生产者与消费者问题,其中一个线程生产的...

    Genng 评论0 收藏0
  • Python线程专题9:线程终止与挂起、实用工具函数

    摘要:上一篇文章线程专题使用锁的注意事项下一篇文章线程专题多线程按顺序执行线程没有任何方法可用于强制终止或挂起。实用工具函数函数名解释返回当前活动的对象数量。 上一篇文章:Python线程专题8:使用锁的注意事项下一篇文章:Python线程专题10:queue、多线程按顺序执行 线程没有任何方法可用于强制终止或挂起。这是设计上的原因,因为编写线程程序本身十分复杂。例如:如果某个线程已经获取...

    dunizb 评论0 收藏0
  • Python线程专题4:Timer对象、Lock对象、Rlock对象

    摘要:语法创建定时器对象,在秒后运行函数,和提供传递给的参数和关键字参数。在调用方法后才能启动计定时器。如果函数还未执行,取消定时器。否则,锁将保持已锁定状态。 上一篇文章:Python线程专题3:thread对象下一篇文章:Python线程专题5:信号量与有边界的信号量 Timer对象、Lock对象、Rlock对象 Timer对象 Timer对象用于在稍后的某个时间执行一个函数。 语法:...

    Edison 评论0 收藏0
  • Python线程专题5:信号量与有边界的信号量

    摘要:有边界的信号量语法创建一个新的有边界信号量。是计数器的初始值,如果忽略,将默认为信号量与有边界的信号量的区别的工作方式与完全相同,但操作的次数不能超过的操作次数。信号量与互斥锁的微妙差别信号量可用于发送信号。 上一篇文章:Python线程专题4:Timer对象、Lock对象、Rlock对象下一篇文章:Python线程专题6:事件 信号量与有边界的信号量 信号量是一个基于计数器的同步原...

    Dionysus_go 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<