多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ### 面试题 > 描述Python GIL的概念,以及它对Python多线程的影响 1.主线程死循环 ``` while True: pass ``` 2.2个线程死循环 ~~~ import threading # 子线程死循环 def test(): while True: pass t1 = threading.Thread(target=test) t1.start() # 主线程死循环 while True: pass ~~~ 3.2个进程死循环 ~~~ import multiprocessing def deapLoop(): while True: pass # 子进程死循环 p1 = multiprocessing.Process(target=deapLoop) p1.start() # 主进程死循环 while True: pass ~~~ ### 参考答案 > python语言和GIL没有关系,仅仅是由于历史原因在Cpython虚拟机,难以移除GIL > GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码 > 线程释放GIL锁的情况:在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL,Python3使用计时器 > Python使用多进程是可以利用多核的CPU资源的 > 多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁