2009-04-27 4 views
5

私は長年走ってきたPythonサービスを持っており、GILを待っている実行可能スレッド(つまり、何か他の理由でブロックされていなかったスレッド)によってどれくらいの累積的な時間が費やされたのかを知りたいと思います。これを行う簡単な方法はありますか?たとえば、定期的にカウンタをログファイルにダンプすることができます。Python GILを待つのにどれくらいの時間を費やすのか簡単に教えてください。

私の根底にある動機は、これらの長期実行プロセスからの謎の応答待ち時間の原因としてGILを排除することです。 GILの疑いがある理由は特にありませんが(他にも症状に合っているかもしれませんが)、他の形式のログではまだ何も表示されていないので、なら簡単です、 。

答えて

3

私は簡単な方法はないと思います。 PyThreadStateリストをトラバースするためにPythonを再構築し、ロックが獲得されるたびにスレッド数をカウントするという厄介な方法があるかもしれませんが、努力する価値はないと思います!

私はこれが投機的な質問だと知っていますが、スレッド化に起因する遅延が適度に懸念される場合は、マルチスレッドモデルではなくマルチプロセッシングモデルに移行する方が賢明かもしれません。プロセスはPythonでより安全で拡張性が高いので、実際にはほとんどの場合、最良の選択です。

0

gil_loadを使用してGILの使用状況をプロファイルできるようになりました。

他の質問にはmy answerを参照してください。

+0

gil_loadプロジェクトは、GILがどのくらいの頻度で保持されているかを示します(*少なくとも1つの*スレッドが実行可能です)。この質問は、GILがどれくらいの頻度で待っているかを質問します(つまり、少なくとも2つのスレッドが実行可能です)。あなたはgil_loadでそれをどのように達成していますか? –

関連する問題