bash и многопоточность запросов [Решено]

Добрый день.

Надо мне посчитать размер хранилища под кеш картинок с сайта. Картинки генерятся приложением на бэкенде в зависимости от запрашиваемого размера (оригинальные картинки хранятся в скл базе) и тупо взять размер картинок в хранилище - не актуально.

Есть большой (1.2 миллиона строк) список ссылок по которым нужно сходить и получить размер объекта. Полученные размеры объекта сложить и посчитать общую сумму.

Последовательное выполнение работает, но очень медленно.

for n in `cat /home/uniq-ex120201.log`; do curl -I "`echo $n`" 2> /dev/null | grep Content-Length | cut -f2 -d" " ; done > Content-Length

ничего в голову не приходит кроме как разрезать файл на 100-200 частей и спрашивать 100 файлов параллельно.

но как эти запросы к разбитым частям “породить” из скрипта?
если 4 - 5 можно написать с (поставив & ) то 200 строк уже не так приятно ))
может как то есть вариант вызвать внутри скрипта цикл с “порождением” отдельной функции по подсчету размеров файлов, и не дожидаясь завершения выполнения функции перейти к следующему вызову?
Да должно работать, как Вы предлагаете.

Как меняется строчка, в зависимости от её номера(т.е. если бы вы их выписали пять, чем бы 5 отличалась от 4 в вашем варианте)?
Заворачиваете вашу строчку в функцию, и вызываете её из цикла, допустим while сколько захотите раз.
Должно работать, а если нет, то можно доработать, чтоб работало :-)
https://fastenv.ru
#!/bin/bash
# функция подсчёта по одному фрагменту списка
funct() {
# должна читать строки со своего стандартного ввода
...
# в конце она выводит или пишет куда-то результат по своему участку
}
# цикл создания процессов
file=file.log # берём этот список
W=`wc -l < $file` # считаем строки
let S=W/10 # делим на десять процессов
for ((i=1;i<=W;i+=S+1))
do
 # берём порцию строк и направляем на стандартный ввод экземпляру функции подсчёта
 sed -n "$i,$((i+S))p" $file | funct &
done
# в конце остаётся суммировать конечные результаты всех участков
Natrio - вы скриптохакер! )

Трюк с “порциями” очень понравился, спасибо!
Пожалуйста :)
Я не хакер, я лишь немного умею программировать, и иногда пишу скрипты.
хакер = хороший программист . Ломает не для выгоды а для души или по работе, что не является единственным занятием. гудгай.
Кракер и др. *-еры = реальные злоумышленики. Те кто идеалогически или покаким-либо еще причинам хакерами быть не могут. бэдгаи.
Добавьте в шапку темы .
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
sleepycat
Добавьте в шапку темы .
что-то админы молчат по поводу кнопочки
grayich
что-то админы молчат по поводу кнопочки
На основании молчания можно сделать вывод, что “Ненужно” (по крайней мере таким способом как было предложено). )
vadik
можно сделать вывод, что “Ненужно”
Если админ не ленивый, то это не настоящий админ, вариант )))
Лень тут кстати не при чем. Сторонний патч наложить мало, его еще потом надо будет и поддерживать. Полную совместимость и отсутствие косяков тоже никто не обещает. Ну и прочие радости костылей и подпорок…
 
Зарегистрироваться или войдите чтобы оставить сообщение.