8.Python网络编程_多线程死锁
Posted 好好学习,天天向上
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.Python网络编程_多线程死锁相关的知识,希望对你有一定的参考价值。
死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
此程序的两个线程会因为互相等待对方的互斥锁而陷入等待,最后由于主线程执行完毕而结束了各个子线程,从而程序结束。
1 import threading 2 import time 3 4 class MyThread1(threading.Thread): 5 def run(self): 6 #对mutexA上锁 7 mutexA.acquire() 8 9 #mutexA上锁,延时1秒,等待另外那个线程,把mutexB上锁 10 print(self.name+‘----do1---up----‘) 11 time.sleep(1) 12 13 #此时会堵塞,因为这个mutexA已经被另外的线程抢先上锁了 14 mutexB.acquire() 15 print(self.name+‘----do2---down----‘) 16 mutexB.release() 17 18 #对mutexA解锁 19 mutexA.release() 20 21 class MyThread2(threading.Thread): 22 def run(self): 23 #对mutexA上锁 24 mutexB.acquire() 25 26 #mutexA上锁,延时1秒,等待另外那个线程,把mutexB上锁 27 print(self.name+‘----do1---up----‘) 28 time.sleep(1) 29 30 #此时会堵塞,因为这个mutexA已经被另外的线程抢先上锁了 31 mutexA.acquire() 32 print(self.name+‘----do2---down----‘) 33 mutexA.release() 34 35 #对mutexB解锁 36 mutexB.release() 37 38 39 if __name__==‘__main__‘: 40 mutexA=threading.Lock() 41 mutexB=threading.Lock() 42 t1=MyThread1() 43 t2=MyThread2() 44 t1.start() 45 t2.start() 46
避免死锁的方法:1.添加超时时间 2.各类算法
以上是关于8.Python网络编程_多线程死锁的主要内容,如果未能解决你的问题,请参考以下文章
网络编程基础--多线程---concurrent.futures 模块---事件Event---信号量Semaphore---定时器Timer---死锁现象 递归锁----线程队列queue(示例代码