包含GIL的简单Python函数

问题描述 投票:4回答:1

我想测试我的应用程序如何响应持有GIL的函数。是否有一个方便的功能可以将GIL保持在可预测的(甚至是很长的)时间内?

我理想的功能就像time.sleep一样,除了睡眠之外,它会保留GIL

python python-multithreading gil
1个回答
2
投票

保持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保持功能。

© www.soinside.com 2019 - 2024. All rights reserved.