您现在的位置是:网站首页>文章详情文章详情

python多线程死锁问题

inlike2019-11-23 原创文章 浏览(1768) 评论(0) 喜欢(30)

简介Python的多线程是不安全的机制,那他的不安全在什么地方呢?一方面是共享全局变量,一方面是死锁问题,还有一方面是多线程的效率有很大优化空间

Python的多线程是不安全的机制,那他的不安全在什么地方呢?一方面是共享全局变量,一方面是死锁问题,还有一方面是多线程的效率有很大优化空间。

对于死锁问题很简单,就是多个线程都在acquire()处被堵塞,都在等待一个release()释放锁型号,结果大家都堵塞锁死,造成这种原因是Python的多线程锁并非是基于逻辑或者位置的,他是基于一种新号,也就是只要遇到acquire我就停下来,收到一个release我就继续执行,完全不管release和acquire是那个位置发出来的,有些时候我们设置同步锁的时候是这样想的:这个位置的acquire和这个位置的release对应,然后实际是只要有acquire我就停下,遇到release我就往下执行。

所以在多个同步锁使用的情况以及内嵌锁的时候,将大概率出现死锁,或者大概率拖慢程序运行效率。

出现死锁和低效率的情况:

image.png


image.png


如何处理死锁和低效率问题:

一种方法是初始化多个锁,在不同位置用不同的锁,这样互相不干扰,在多出使用同步锁的时候可以考虑。

image.png


另一种是使用递归锁RLock,递归锁会对线程中的锁计数,当锁定和解锁一致时,另一个线程才能获取资源,注意在内嵌锁中使用时,只有当最外层锁被解锁才能切换资源,将导致极大的浪费。

image.png

可以看到是一个线程释放最外成的锁后才运行的另一个线程,效率并不高,在多线程使用中要格外小心。


很赞哦! ( 30)
    《Python实战进阶》
    None
    None
    夏至已深

站点信息

  • 建站时间:2019-5-24
  • 网站程序:like in love
  • 主题模板《今夕何夕》
  • 文章统计:104条
  • 文章评论:***条
  • 微信公众号:扫描二维码,关注我们
  • 个人微信公众号