是否存在阻塞I/O且不允许其他线程运行的内置函数?
今天我在 thread
模块的“注意事项”部分看到了一段有趣的说明:
并不是所有可能会因为等待输入输出(I/O)而阻塞的内置函数都允许其他线程运行。(最常用的几个函数(
time.sleep()
、file.read()
、select.select()
)的表现是正常的。)
在我见过的关于Python线程的讨论中,大家通常都认为所有进行I/O操作的内置函数都会释放全局解释器锁(GIL),这意味着当这些函数在等待时,其他线程可以继续运行。直到现在,我认为唯一可能导致I/O操作阻塞其他线程的风险,就是调用了一个有问题的C扩展,而这个扩展没有释放GIL。
那么,thread
文档中的这段话是真的吗?有没有哪些内置的、会阻塞的I/O操作不释放GIL?到目前为止,我还没有找到具体的例子。