2010-07-02 4 views
0

У меня есть сценарий, который загружает, а затем конвертирует видео. Я пытаюсь сделать все загрузки сразу (много wgets), а затем, когда они будут завершены, конвертируйте их. Прямо сейчас я должен ждать, пока каждый файл загружается отдельно, а затем конвертируется, когда это делается. Я хочу, чтобы все запросы на загрузку выполнялись одновременно.Как эффективно управлять этими подпроцессами?

Вот часть моего сценария загрузки, который все держит.

for id in ids: 
    subprocess.Popen(cmd, shell=True).wait() 

У меня есть сценарий «конвертировать», ожидающий завершения сценария загрузки. (что необходимо, потому что я использую наборы загрузок, чтобы организовать все.)

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

Благодаря

ответ

1

можно использовать

process_list = []  
for id in ids: 
    process_list.append(subprocess.Popen(cmd, shell=True)) 
for process in process_list: 
    process.wait() 

как таковой вы будете ждать только в конце одновременных заданий.

+0

Отлично, приятно и просто. благодаря :) – greay98

0

Вы могли бы использовать xargs как простое решение, если это для вашей доступна: платформы.

От человека странице:

-P max-procs 
      Run up to max-procs processes at a time; the default is 1. If 
      max-procs is 0, xargs will run as many processes as possible at 
      a time. Use the -n option with -P; otherwise chances are that 
      only one exec will be done. 

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

+0

Я не слишком хорошо разбираюсь в Linux и не понимаю, как это будет работать. Могу ли я передать все команды оболочки, которые генерируются в цикле for for для xargs, а затем ждать? – greay98