python多线程锁的使用,python线程死锁的原因及解决方法

  python多线程锁的使用,python线程死锁的原因及解决方法

  python _dominic_80-ChinaUnix博客的线程锁机制

  python的线程锁定机制

  标签:

  Python线程锁

  分类:PYTHON

  螺纹和锁

  请求锁-进入锁池并等待-获取锁-锁定-释放锁。

  锁

  锁定()

  Lock(指令锁定)是可用的最低同步指令。当锁被锁定时,它不属于特定的线程。Lock包含两种状态,——锁定和解锁,以及两种基本方法。

  可以认为Lock有一个锁池。当线程请求锁时,它将线程放入池中,直到它获得锁,然后离开池。在状态图中,池中的线程处于同步阻塞状态。

  施工方法:

  锁定()

  示例方法:

  Acquire([timeout]):将线程置于同步阻塞状态,并尝试获取锁。

  Release():释放锁。线程必须在使用前被锁定,否则将引发异常。

  示例程序:

  #!/usr/bin/env python

  导入线程导入timedata=0lock=threading。Lock()def fun():全局数据打印“%s acquire lock .”% threading.currentThread()。getName() If.acquire (): #等待锁被获取。如果采集成功,开始锁定并操作打印“% s get the lock”% threading.currentthread()。getname()data=1 Print data time . sleep(1)Print“% s release lock .”% threading.currentthread()。getname()lock . release()# release lock t1=threading . thread(target=fun)T2=threading . thread(target=fun)T3=threading。线程(target=fun)t1 . start()T2 . start()T3 . start()

  在上面的代码中,只有当线程t1的锁被释放时,线程t2才能被锁定。同样,当t2锁被释放时,t3可以锁定,但t2和t3会在t1时一起进入等待锁获取的状态。

  重新锁定

  RLock()

  RLock(可重入锁)是一个同步指令,可以被同一个线程多次请求。RLock使用了“拥有线程”和“递归层次”的概念。当它被锁定时,RLock由一个线程拥有。带有RLock的线程可以再次调用acquire(),释放锁时需要调用release()相同的次数。

  可以认为RLock包含一个锁池和一个初始值为0的计数器。每次成功调用acquire()/release()时,计数器会为1/-1,为0时,锁被解锁。

  施工方法:

  RLock()

  示例方法:

  acquire([超时])/release():类似于Lock。

  示例程序:

  #!/usr/bin/env python

  导入线程导入timedata=0lock=threading。RLock()def fun():全局数据打印“%s获取锁.”% threading.currentThread()。getName() If.acquire (): #等待锁被获取。如果采集成功,开始锁定并操作打印“% s get the lock”% threading.currentthread()。getname()data=1 Print data time . sleep(2)Print“% s”再次获取锁。% threading.currentthread()。getname () iflock.acquire (): #再次获取合并。如果采集成功,开始锁定并操作data=1 printdatatime . sleep(2)print“% s release lock .”% threading.currentthread()。getname()lock . release()# release lock time . sleep(1)Print“% s release lock again .”% threading.currentthread()。getname () lock.release () #释放锁t1=线程。线程(target=fun) t2=线程。线程(target=fun)t3=线程。线程(target=fun)t1 . start()T2 . start()T3 . start()

  在上面的代码中,只有当线程t1两次请求的锁被释放时,线程t2才能锁定。同样,t2两次请求的锁释放后,t3才能锁,但t2和t3会和t1一起进入等量锁获取状态。

  推荐博客文章Python常用算法运算(3) (2小时前)节俭分析小工具nginx lua扩展使用(4) (2小时前)重庆著名律师阐述报应刑法与预防刑法(3小时前)上海律师法律咨询讲述交通事故赔偿时应注意的方面(3小时前)Perl钻石运算符输入(5小时前)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: