предел трубы - PullRequest
       27

предел трубы

1 голос
/ 24 июня 2011

У меня есть текстовый список URL-адресов, которые я хочу загрузить

n=1
end=`cat done1 |wc -l`
while [ $n -lt $end ]
do
nextUrls=`sed -n "${n}p" < done1`
wget -N nH --random-wait -t 3 -a download.log -A$1 $nextUrls 
let "n++"
done

Я хочу сделать это быстрее с трубами, но если я делаю это

 wget -N nH --random-wait -t 3 -a download.log -A$1 $nextUrls &

мой баран заполняется иполностью блокирует мой компьютерКто-нибудь знает, как ограничить число созданных труб одновременно 10?

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

Вы не создаете трубы (|), вы создаете фоновые процессы (&).Каждый раз, когда ваш while выполняет свое тело, вы создаете новый процесс wget и не ждете его завершения, что (в зависимости от значения end) может создать лот из wget обрабатывает очень быстро.Либо выполните последовательно (удалите &), либо вы можете попробовать , выполняющий n параллельно, и ждать их .

Кстати, бесполезное использование cat: вы можете просто сделать:

end=`wc -l done1`
1 голос
/ 24 июня 2011

У меня есть текстовый список URL-адресов, которые я хочу загрузить ... Я хочу сделать это быстрее ..

Так что вот самый короткий способ сделать это.Следующая команда загружает URL-адрес из списка, содержащегося в файле * txt_list_of_urls *, параллельно выполняющего 10 потоков:

xargs -a txt_list_of_urls -P 10 -r -n 1 wget -nv
...