python – 强制GIL不要切换线程

我正在分析一些多线程CPython代码.
为了测量执行特定代码段所需的时间,我想强制GIL (Global Interpreter Lock)不在该段的线程之间切换.如何才能做到这一点?

更新:
假设以下伪代码:

some_code_1()
make_the_interpreter_not_change_thread()
take_start_time()   # time critical
code_to_profile()   # time critical
take_end_time()     # time critical
release_the_interpreter()
some_code_2()

我担心的是,解释器将在“时间关键”分析期间切换线程.

解决方法:

GIL不会切换线程. GIL是一个互斥锁,可以防止多个线程同时执行字节码.因此,为了防止线程切换,您需要查看其他地方.

您可以使用非常大的值调用sys.setcheckinterval(),以防止在分析代码时进行切换.

无论何时调用sys.setcheckinterval(count),当前的’counter’都会重置为新值,因此一旦调用它,就不会允许线程切换至少计数字节码指令.

上一篇:python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法


下一篇:python详解(10)--GIL与高并发与其他