将在CPython的GIL 1中 只
涉及执行Python代码。使用大量CPU的线程安全C扩展可能会释放GIL,只要它不需要与Python运行时进行交互即可。
一旦C代码需要与Python“对话”(请参阅:回调到Python运行时),则它需要再次获取GIL-
也就是说,GIL将为“解释器”建立保护/原子行为(并且我使用的术语是宽松的), 并不是 要防止本机/非Python代码同时运行。
释放GIL周围的I / O(阻塞或不使用CPU与否)是同样的事情-直到数据被移动 到 的Python没有理由获取GIL。
1 GIL之所以引起争议,是因为它在某些情况下阻止多线程CPython程序充分利用多处理器系统。请注意,潜在的阻塞或长时间运行的操作(例如I /
O,图像处理和NumPy数字运算)发生在GIL之外。因此 ,只有在GIL内部花费大量时间解释CPython字节码的多线程程序中, GIL才成为瓶颈。



