我想测试我的应用程序如何响应持有 GIL 的函数。是否有一个方便的函数可以在可预测的(甚至很长的)时间内保持 GIL?
我理想的函数应该是像 time.sleep
一样操作的东西,除了与 sleep 不同的是,它会保存 GIL
最佳答案
持有 GIL 的一种简单但很老套的方法是使用 re
模块和已知的慢速匹配:
import re
re.match(r'(a?){30}a{30}', 'a'*30)
在我的机器上,这在 Python 2.7.14 上保持 GIL 48 秒(在 3.6.3 上几乎一样长)。但是,这取决于实现细节,如果
re
模块得到改进,则可能会停止工作。更直接的方法是编写一个只休眠的 c 模块。 Python C 扩展不会自动释放 GIL(与 ctypes 不同)。按照 hellomodule 示例 here ,并将
printf()
替换为对 sleep()
(或 the Windows equivalent )的调用。构建模块后,您将拥有一个可以在任何地方使用的 GIL 保持函数。关于python - 保存 GIL 的简单 Python 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39103557/