Python 3.2及以上版本中的sys.setswitchinterval是什么?

16

没人要吗?!50声望,第一次出价... - Matt Joiner
2个回答

6

其中一个用途是确保操作运行原子性,例如:

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导致性能下降的边缘情况)时,特别调整您的代码。也许(只是也许)改变上下文切换间隔可以为您提供更快的速度。
免责声明:上述第一种方法被认为是黑魔法,完全不推荐使用(在这种情况下,类似于threading.Lock的方法更可取)。总的来说,我认为在正常情况下不应该改变线程上下文切换间隔。我将引用Tim Peters关于元类的话来概括:“改变线程上下文切换间隔比99%的人需要的魔法更深奥”。

当一个应用程序受到IO限制时,你会增加还是减少它? - Matt Joiner
3
@Matt:实际上,仅有绑定IO的线程并不会导致问题,因为每当一个线程执行绑定IO的指令时,它都会释放GIL。但是,当将绑定IO的线程与CPU线程一起使用时,就会出现问题,如在此问题中所解释的(http://bugs.python.org/issue7946)。在这种情况下,也许减小切换间隔可以提高性能,因为如果IO绑定的线程没有完全阻塞,它们就不必等待太长时间。 - mouad

1
这样做更加一致和可预测。
以前,解释器在完成N个虚拟指令后切换线程,每个指令的执行时间可以任意长。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接