是否存在阻塞I/O且不允许其他线程运行的内置函数?

12 投票
1 回答
595 浏览
提问于 2025-04-18 13:53

今天我在 thread 模块的“注意事项”部分看到了一段有趣的说明:

并不是所有可能会因为等待输入输出(I/O)而阻塞的内置函数都允许其他线程运行。(最常用的几个函数(time.sleep()file.read()select.select())的表现是正常的。)

在我见过的关于Python线程的讨论中,大家通常都认为所有进行I/O操作的内置函数都会释放全局解释器锁(GIL),这意味着当这些函数在等待时,其他线程可以继续运行。直到现在,我认为唯一可能导致I/O操作阻塞其他线程的风险,就是调用了一个有问题的C扩展,而这个扩展没有释放GIL。

那么,thread 文档中的这段话是真的吗?有没有哪些内置的、会阻塞的I/O操作不释放GIL?到目前为止,我还没有找到具体的例子。

1 个回答

11

这是Guido van Rossum的官方说法

我从来没有想过,这个说法在20年后还会出现在文档里。:-) 请把它删掉。

所以我问题的答案是“没有”。

撰写回答