3

マルチスレッドのCPythonコードをプロファイリングしています。
特定のコード セグメントの実行にかかる時間を測定するために、GIL (Global Interpreter Lock)がそのセグメントのスレッド間で切り替えないように強制したいと考えています。これはどのように行うことができますか?

更新:
次の疑似コードを想定します。

some_code_1()
make_the_interpreter_not_change_thread()
take_start_time()   # time critical
code_to_profile()   # time critical
take_end_time()     # time critical
release_the_interpreter()
some_code_2()

私の懸念は、インタープリターが「タイム クリティカルな」プロファイリング期間中にスレッドを切り替えることです。

4

1 に答える 1

7

GILはスレッドを切り替えません。GILは、複数のスレッドが同時にバイトコードを実行するのを防ぐミューテックスです。そのため、スレッドの切り替えを防ぐには、他の場所を探す必要があります。

sys.setcheckinterval()コードのプロファイリング中の切り替えを防ぐために、非常に大きな値で呼び出すことができます。

現在の「カウンタ」を呼び出すとsys.setcheckinterval(count)、新しい値にリセットされるため、呼び出すとすぐに、少なくともcountバイトコード命令のスレッドスイッチは許可されません。

于 2013-01-08T09:45:17.620 に答える