Python 3.2は、sys.setswitchinterval
を公開するAntoine Pitrouによってnew GIL implementationを導入しました。sys.setswitchinterval in Python 3.2以降
これはいつ変更するのが便利なのですか?その理由は何ですか?
Python 3.2は、sys.setswitchinterval
を公開するAntoine Pitrouによってnew GIL implementationを導入しました。sys.setswitchinterval in Python 3.2以降
これはいつ変更するのが便利なのですか?その理由は何ですか?
一つの使用は、操作(複数可)は、例えば、アトミックに実行することを確認するために、次のようになります。
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を解放するたびに、問題が発生します。 IOバインドされたスレッドがブロックされなかった場合、ずっと待たなくて済むため、スイッチの間隔を短くするとパフォーマンスが向上する可能性があります(この場合も同様です)まったく。 – mouad
+1この方法では「ダーク」マジックを参照します –
受取人はいませんか?一度50代の代理人... –