2

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 固有のツールが含まれていてもかまいません。

4

1 に答える 1

1

ラインプロファイラーである を試しline_profilerて、

for foo in pool.imap_unordered(a_slow_function, f, chunksize=100)

行と合計時間を表示し、これらa_slow_function2 つの数値を比較します。

それが良いアイデアかどうかはわかりませんが、それでもアイデアです。


ファイル内の行をどれだけ速く読み取ることができるかを確認するなど、個別にタイミングを試すこともできます。

例えば。

for line in f: pass
于 2013-09-20T16:14:35.360 に答える