Python: запустить несколько EXE с балансировкой нагрузки - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь запустить несколько exe-файлов (12 из них), поскольку из-за ресурсов компьютера я могу создать максимум 4 за раз, прежде чем получу снижение производительности.

Я пытаюсь выяснить, есть ли способ вызывать 4 exe'а за раз и, как только один из них заканчивает, вызывать другого exe, чтобы заполнить ресурсы, которые высвободились

Мой текущий код делает это:

    excs = [r"path\to\exe\exe.exe",r"path\to\exe\exe.exe",r"path\to\exe\exe.exe",r"path\to\exe\exe.exe"]

    running = [subprocess.Popen(ex) for ex in excs]

    [process.wait() for process in running]

Он повторяет этот процесс три раза, чтобы выполнить все 12. К сожалению, это означает, что ему нужно дождаться завершения всех из них, прежде чем перейти к следующему набору. Есть ли более эффективный способ сделать это?

Для справки, все исполняемые файлы имеют разное время выполнения.

1 Ответ

0 голосов
/ 05 июля 2018

Python имеет ThreadPoolExecutor , что делает это очень удобным

import subprocess
from concurrent.futures import ThreadPoolExecutor

def create_pool(N,commands):
   pool = ThreadPoolExecutor(max_workers=N)
   for command in commands:
      pool.submit(subprocess.call, command)
   pool.shutdown(wait=False)
def main():
   N_WORKERS=4
   commands = [job1, job2, ...]
   create_pool(N_WORKERS, commands)
...