3

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

更新:
假设以下伪代码:

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()

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

4

1 回答 1

7

GIL 不切换线程。GIL 是一个互斥体,可以防止多个线程同时执行字节码。因此,为了防止线程切换,您需要寻找其他地方。

您可以调用sys.setcheckinterval()一个非常大的值来防止在分析您的代码时切换。

每当您调用sys.setcheckinterval(count)当前的“计数器”时,都会将其重置为新值,因此一旦您调用它,至少count字节码指令都不允许进行线程切换。

于 2013-01-08T09:45:17.620 回答