2

私は、Pythonのマルチプロセッシングモジュールを使っていくつかのコードをプロファイリングしてきました( 'job'関数は数値を二乗するだけです)。私は奇妙な見つけPythonマルチプロセッシング:大きなチャンク化が遅いのはなぜですか?

data = range(100000000) 
n=4 
time1 = time.time() 
processes = multiprocessing.Pool(processes=n) 
results_list = processes.map(func=job, iterable=data, chunksize=10000) 
processes.close() 
time2 = time.time() 
print(time2-time1) 
print(results_list[0:10]) 

ことの一つは、最適なチャンクサイズは約10Kの要素のように見えるということである - これは私のコンピュータ上で16秒を要しました。チャンクサイズを100kまたは200kに増やすと、20秒に減速します。

この違いは、長いリストでは酸洗処理に要する時間が長いためですか? 100要素のチャンクは62秒かかっていると私は推測しています。これは、異なるプロセス間でチャンクを前後に渡すために必要な余分な時間のためです。最適なチャンクについて

答えて

3

:小さなチャンクのトンを有する

  1. は、このように小さなチャンクが望ましいであろう、4人の異なる労働者がより効率的に負荷を分散することを可能にします。
  2. 一方、プロセスに関連するコンテキストの変更は、新しいチャンクを処理する必要があるたびにオーバーヘッドを追加するため、コンテキストの変更量が少なくなるため、チャンクが少なくて済みます。

両方のルールが異なるaproachesを必要とするため、中途半端なポイントが、需給曲線と同様です。

関連する問題