Thread State and the Global Interpreter Lock:
锁定也是围绕可能阻塞的I / O操作(如读取或写入文件)发布的,因此其他Python线程可以同时运行。
@Alex Martelli的相关答案here说:
所有Python的阻塞I / O原语在等待I / O块解析时释放GIL - 就这么简单!他们当然需要在继续执行更多Python代码之前再次获取GIL,但是对于他们只是在等待一些I / O系统调用的长期机器周期间隔,他们不会不需要GIL,所以他们不会坚持下去!
*这是否意味着当open
或read
或write
碰巧阻塞时,GIL会被释放,以便其他线程与I / O操作并行运行?
这样说是正确的:如果一个线程或多个线程被I / O操作阻塞,并且只有一个线程执行字节代码,则可能会有多个线程同时执行。每当I / O操作中的一个被阻塞的线程需要访问Python对象时,它必须首先获取GIL。
答案 0 :(得分:1)
是。当线程被阻塞等待IO完成时,GIL被释放,因此可供其他一些线程获取。