Python 3.2引入了Antoine Pitrou的new GIL implementation,它公开了函数sys.setswitchinterval
。
何时更改此功能很有用,为什么?
一种用途是确保操作以原子方式运行,例如:
sys.setswitchinterval
[另一个用例是在面对sw_interval = sys.getswitchinterval()
try:
# Setting the switch interval to a very big number to make sure that their will be no
# thread context switching while running the operations that came after.
sys.setswitchinterval(sys.maxint)
# Expressions run here will be atomic ....
finally:
sys.setswitchinterval(sw_interval)
时(或在新GIL产生不良性能的任何极端情况下)专门调整代码。也许(只是也许)更改上下文切换间隔可以提高速度。
Disclaimer:上面引用的第一种方法被认为是黑魔法,完全不建议使用(在这种情况下,首选convoy effect类)。通常,我认为在正常情况下不必更改线程上下文切换间隔。我将解释蒂姆·彼得斯已经对元类说的话:threading.Lock
。