multiprocessing.Pool
サブプロセスの各サブプロセスが入力の待機に費やした時間と、データの処理に費やした時間を測定する方法はありますか?
ファイルの行を並行して処理するこの簡単な例を見てみましょう。
from multiprocessing import Pool
pool = Pool(processes=16)
with open('a_large_file.txt', 'r') as f:
for foo in pool.imap_unordered(a_slow_function, f, chunksize=100)
do_something_with(foo)
a_slow_function
かかる時間、 から読み取る速度、およびチャンク サイズによってf
は、サブプロセスがデータを待っている間に親指をいじることになる可能性があります。これを測定できますか?
これまでの私の最善の推測は、ラップアラウンドcProfile.runctx
ですa_slow_function
。これにより、ワーカーごとに 1 つのプロファイル ファイルが作成され、スクリプトの合計実行時間と比較できます。ただし、do_something_with(foo)
結果が歪む可能性があるため、それを考慮する必要があります。これを行うためのよりクリーンな方法はありますか?
注: ソリューションに Linux 固有のツールが含まれていてもかまいません。