2011-09-11 8 views

答えて

4

一つの使用は、操作(複数可)は、例えば、アトミックに実行することを確認するために、次のようになります。

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

+0

アプリケーションがIOバウンドの場合、増やしたいのですか? –

+2

@Matt:IOバインドされたスレッドのみを持つのは問題ありません。なぜなら、スレッドがIOバインドされた命令を実行してGILを解放するたびに、問題が発生します。 IOバインドされたスレッドがブロックされなかった場合、ずっと待たなくて済むため、スイッチの間隔を短くするとパフォーマンスが向上する可能性があります(この場合も同様です)まったく。 – mouad

+0

+1この方法では「ダーク」マジックを参照します –