1

56 コアのマシンでプロセス プール エグゼキューターを使用して並列インスタンスをトリガーすると、Python スクリプトの実行時間が長くなることがわかります。スクリプト abc.py は、約 1 秒かかる重い Python ライブラリをインポートします。

time python ~/abc.py

real 0m0.846s
user 0m0.620s
sys 0m0.078s

試験方法

import shlex
from subprocess import Popen, PIPE

def test():
    command = "python /u/deeparora/abc.py"
    p = Popen(shlex.split(command), stdout=PIPE, stderr=PIPE)
    p.wait(timeout=None)

以下のコードも予想される 1 秒かかります

シリアル実行

import concurrent.futures

pool = ProcessPoolExecutor(max_workers=1)
futures = []
 
for index in range(0, 1):
    futures.append(pool.submit(test))

for future in concurrent.futures.as_completed(futures):
    pass

ただし、以下のコードは 56 コアのマシンで実行するのに 5 秒かかります。

並列実行

import concurrent.futures

pool = ProcessPoolExecutor(max_workers=50)
futures = []
 
for index in range(0, 50):
    futures.append(pool.submit(test))

for future in concurrent.futures.as_completed(futures):
    pass

プロセス ログで実行時間を確認したところ、スクリプト (abc.py) の実行時間も 1 秒から 4 秒に増加したことがわかりました。誰かがこの動作を理解するのを手伝ってくれますか?

4

1 に答える 1