2009-09-11 4 views
9

は、私はいくつかのことを並列化するmultiprocessingを使用することを含むmy_parallel_script.pyと呼ばれるPythonスクリプトを持っていると私は、次のコマンドでそれを実行したとします並列化されたPythonスクリプトをどのようにプロファイルできますか?

python -m cProfile my_parallel_script.py 

これは親プロセスのみためのプロファイル出力を生成します。子プロセスで行われた呼び出しはまったく記録されません。子プロセスのプロファイルも可能ですか?

唯一のオプションは、ソースを変更することですが、これを行う最も簡単な方法は何ですか?

答えて

8

cProfileは1つのプロセス内でのみ動作するため、プロファイルされた子プロセスを自動的に取得することはありません。

1つのプロセスとして個別に呼び出すことができるように、子プロセスコードを調整することをお勧めします。その後、プロファイラの下で実行します。プロファイリング中にシステムのマルチプロセスを実行する必要はなく、単一の子のみを実行するようにジョブを単純化します。

+3

私はすでにこれを試していますが、残念ながら私はプロファイリング中にシステムのマルチプロセスを実行する必要があります。しばらくすると大幅に減速したように見えますが、マルチプロセッシングが有効な状態で実行されている場合のみです。 – Fragsworth

+3

それはおそらくリソースの競合であり、プロファイリングはそれを見つける方法ではないかもしれません。いずれの場合でも、一度にすべての子プロセスをプロファイリングすることができます。子のPythonコードでプロファイルをプログラムで呼び出すことができます。 –

関連する問題