Я понимаю, что использование подпроцессаявляется предпочтительным способом вызова внешней команды.
Но что, если я хочу запустить несколько команд параллельно, но ограничить количество запускаемых процессов? Что меня беспокоит, так это то, что я не могу заблокировать подпроцессы. Например, если я вызову
subprocess.Popen(cmd, stderr=outputfile, stdout=outputfile)
, то процесс продолжится, не дожидаясь завершения cmd
. Поэтому я не могу завернуть его в рабочую библиотеку multiprocessing
.
Например, если я сделаю:
def worker(cmd):
subprocess.Popen(cmd, stderr=outputfile, stdout=outputfile);
pool = Pool( processes = 10 );
results =[pool.apply_async(worker, [cmd]) for cmd in cmd_list];
ans = [res.get() for res in results];
, то каждый рабочий процесс завершится и вернется после создания подпроцесса. Поэтому я не могу ограничить количество процессов, генерируемых subprocess
, используя Pool
.
Как правильно ограничить количество подпроцессов?