Управление количеством подпроцессов, используемых для вызова внешних команд в python.

Я понимаю, что использование подпроцессаявляется предпочтительным способом вызова внешней команды.

Но что, если я хочу запустить несколько команд параллельно, но ограничить количество запускаемых процессов? Что меня беспокоит, так это то, что я не могу заблокировать подпроцессы. Например, если я вызову

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.

Как правильно ограничить количество подпроцессов?

13
задан Vendetta 21 March 2012 в 16:22
поделиться