プロセスの数がPythonのCPUのスレッドの総数よりも多いのに、より多くのプロセスを使用することでアプリケーションがより高速に実行されるのはなぜですか?これがコードです
import time
from concurrent.futures import ProcessPoolExecutor
def wait():
time.sleep(1)
start = time.time()
#create the process pool
with ProcessPoolExecutor(max_workers=40) as executor:
future = []
for _ in range(400):
future.append(executor.submit(wait))
start2 = time.time()
future_res = []
for i,v in enumerate(future):
future_res.append(v.result())
print(time.time()-start)
print(time.time()-start2)
その出力は次のとおりです。
10.364367246627808
9.99793791770935
ますます多くのプロセスを使用すると、アプリケーションがどんどん速く実行されるということですか?
指定されたwait
関数は、興味深い量のCPUサイクルを消費しません。スケジューラーとのみ対話します。同時実行レベルが高いほど、重複する多くのスリープがより速く完了することは驚くことではありません。ここで選択しましたnum_tasks = 400
。値が大きい場合、完了時間はの比率に近づく傾向がありますnum_tasks / max_workers
。これは、CPUバウンドワークロードで発生する動作とはまったく異なります。
「実際の」問題として別のワークロードを念頭に置いている場合は、別の質問でそれについて質問し、それが主にCPU、I / O、またはネットワークにバインドされているかどうかを説明してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加