Python 3.2引入了一個由Antoine Pitrou提供的new GIL implementation,該函數公開了函數sys.setswitchinterval
。Python 3.2及更高版本中的sys.setswitchinterval
什麼時候改變它會有用,爲什麼?
Python 3.2引入了一個由Antoine Pitrou提供的new GIL implementation,該函數公開了函數sys.setswitchinterval
。Python 3.2及更高版本中的sys.setswitchinterval
什麼時候改變它會有用,爲什麼?
的用途之一將是確保操作(S)原子運行,例如:
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)
另一種使用情況將是你的代碼特別是當你面對的convoy effect(或任何邊緣調新的GIL表現不佳的情況)。也許(也許)更改上下文切換時間間隔可以給你更多的速度。
免責聲明:選址上面的第一種方法是考慮黑暗魔法,它是完全不推薦(該threading.Lock
-likes是優選的,使用的情況下)。一般情況下,我認爲改變線程上下文切換時間間隔在一般情況下是不可行的。我將解釋蒂姆·彼得斯已經提到的元類:changing thread context switch interval is deeper magic than 99% of people are going to need
。
當一個應用程序是IO綁定,你會增加_或_減少它嗎? –
@Matt:實際上只有IO綁定線程並不會產生問題,因爲每次線程執行一個IO綁定指令時它會釋放GIL,但是在使用帶有CPU線程的IO綁定線程時可以看到問題,如本文所述問題(http://bugs.python.org/issue7946)在這種情況下(再次)可能會減少切換時間間隔可能會導致更好的性能,因爲IO綁定線程不會等待更長時間,如果他們不阻止在所有。 – mouad
+1用於引用此方法中的「黑暗魔法」 –
No takers ?! 50代表去一次... –