2017-10-20 7 views
0

現在、私は、現在の私は、合計量がより少ない場合に基づいて起動された並列プロセスの数を制限するために、次の戦略を実行しているデータファイルの何千もの解析、利用可能なCPUの数。CPUの制限に基づいてマルチプロセッシングを処理する方法

これは最も適切な方法ですか?

from concurrent.futures import ProcessPoolExecutor 
from multiprocessing import cpu_count 


def pool_executor(function_name, data): 
    if len(data) >= 8: 
     workers = cpu_count() 
    else: 
     workers = len(data) 
    with ProcessPoolExecutor(max_workers=workers) as executor: 
     executor.map(function_name, data) 

答えて

0

あなただけのmax_workers値をcpu_count()に渡すことができます。 len(data)がそれより小さい場合は、必要以上の労働者を作成しません。

def pool_executor(function_name, data): 
    with ProcessPoolExecutor(max_workers=cpu_count()) as executor: 
     executor.map(function_name, data) 

実際にはcpu_count()が最適値であるかどうかを調べることをおすすめします。あなたのプロセスがファイルを読み書きするのに多くの時間を費やしているのであれば、実際にはcpu_count()よりわずかに多くを開始すれば、実際にはさらに追加的な効果が得られるかもしれません。

+0

ありがとうございました、まあ、私はそれが時間をプロファイリングしていると思います... –

関連する問題