python全栈开发第36天------GIL全局解释锁、死锁现象和递归锁、信号量、Event事件、线程

一、GIL全局解释锁

  定义:本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一个进程必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,无法并行

  用途:因为Cpython解释器的垃圾回收机制不是线程安全的

  用法:计算密集型的使用多进程;IO密集型的使用多线程

二、死锁现象与递归锁

  死锁:是指两个或两个以上的进程或是线程在执行过程中,因为争夺资源而造成的一种互相等待的现象

  解决方法:递归锁

from threading import Thread,Lock,RLock
import time

# mutexA=Lock()
# mutexB=Lock()
mutexB=mutexA=RLock()


class Mythead(Thread):
def run(self):
self.f1()
self.f2()

def f1(self):
mutexA.acquire()
print('%s 抢到A锁' %self.name)
mutexB.acquire()
print('%s 抢到B锁' %self.name)
mutexB.release()
mutexA.release()

def f2(self):
mutexB.acquire()
print('%s 抢到了B锁' %self.name)
time.sleep(2)
mutexA.acquire()
print('%s 抢到了A锁' %self.name)
mutexA.release()
mutexB.release()

if __name__ == '__main__':
for i in range(100):
t=Mythead()
t.start()

三、信号量
  Semaphore管理一个内置的计数器
四、Event事件
  当其他线程需要判断另外某个线程的状态来确定自己下一步的操作,则需要用到Event事件来解决
五、线程Queue
  LifoQueue来堆栈,后进先出
原文地址:https://www.cnblogs.com/zhouyi0316/p/9605307.html