私はPythonで本質的にマルチスレッド化されたモジュールを開発していて、それがどこで時間を費やしているかを知りたいのです。 cProfileはメインスレッドのみをプロファイルするようです。計算に関係するすべてのスレッドをプロファイリングする方法はありますか?
yappi (Yet Another Python Profiler))を参照してください。
1つのcProfile
を実行する代わりに、各スレッドで個別のcProfile
インスタンスを実行してから、統計を組み合わせることができます。 Stats.add()
がこれを自動的に行います。
少し余分な作業を行うことに問題がなければ、profile(self, frame, event, arg)
を実装する独自のプロファイリングクラスを作成できます。これは関数が呼び出されるたびに呼び出され、そこから統計を収集する構造をかなり簡単に設定できます。
次に _threading.setprofile
_ を使用して、その関数をすべてのスレッドに登録できます。関数が呼び出されたら、threading.currentThread()
を使用して、どの関数で実行されているかを確認できます。詳細(およびすぐに実行できるレシピ)はこちら:
http://code.activestate.com/recipes/465831/
http://docs.python.org/library/threading.html#threading.setprofile
異なるスレッドのメイン関数が異なる場合、 ここ から非常に役立つprofile_func()
デコレーターを使用できます。