Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / умный многопоточный bash скрипт / 9 сообщений из 9, страница 1 из 1
29.03.2012, 00:08
    #37728595
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
возможно ли, что бы скрипт автоматически запускал 2-10 дочерних потоков (скажем, md5sum). но не более того.
то есть он запускает и сам же дожидается так, что бы количество дочек не превышало 2-10 штук ?

или это придется делать "руками" ?

количество "дочек" - определяется переменной. каждый поток - делает свою задачу (для каждого потока - свои аргументы, выдаваемые в цикле). для каждого скрипта - количество потоком определяется переменной. т.е. если один поток поддерживает до 3х нитей, но два скрипта, запущенные одновременно - до 6. и т.д.

4 8 15 16 23 42
...
Рейтинг: 0 / 0
29.03.2012, 00:16
    #37728613
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
Aklin, зачем себя насиловать этим недоязыком? ты же не поддерживаешь скрипты инициализации для системы.
Когда скрипт на баше длинее трех строк - пора его переписать на нормальном языке программирования.

Модуль Parallel::ForkManager в Perl делает в точности то, что тебе нужно.
...
Рейтинг: 0 / 0
29.03.2012, 09:12
    #37728799
Ихтиандр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
Ну хочет недоязык!

Можно все что угодно, только придется изобретать велосипед: потоки, как я это вижу, будут представлять отдельный шелл скрипт, который будет создавать файлы-флаги, а мамочка будет эти флаги отслеживать.
...
Рейтинг: 0 / 0
29.03.2012, 09:38
    #37728846
bga83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
Aklin,

есть вариант с асинхронным выполнением команд через & , не знаю насколько это тебе подойдет
...
Рейтинг: 0 / 0
29.03.2012, 09:51
    #37728869
Ихтиандр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
Ну я и имел в виду &, но для синхронизации потоков они должны обмениваться сигналами
я и предложил файлы-флажки
...
Рейтинг: 0 / 0
29.03.2012, 10:45
    #37728999
Camper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
Ихтиандр,

Писал когда-то скриптец, правда на sh, реализовал эту функциональность через механизм джобов.
Работало (и скорее всего еще работает) в продуктиве. Можно нагенерить любой список команд и пустить через pipe на выполнение функции.

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
#!/usr/bin/sh

#--Local function
parallelrun() {
MPROC=$1
LOG=$2
while [ 1 = 1 ]
do
if [ `jobs -p| wc -l` -lt ${MPROC} ] 
then
	read cmd
	if [ -z "$cmd" ]
	then
		break	
	fi	
	nohup /bin/sh "$cmd" >> ${LOG} 2>&1 &
fi
done
}

#--Start jobs through pipe
#--Define script variables
export SDIR=$1
export TDIR=$2
LOG=$0.log
echo "Logfile location:\t\t ${LOG}"

#--Starting copy in parallel
echo "Starting 3 copy servers" >> ${LOG} 
echo "-----------------------" >> ${LOG}
ls -d ${SDIR}/* | awk 'BEGIN {ddir=ENVIRON["TDIR"];} $0 !~ /\/log0/ && $0 !~ /\/cntrl0/ && $0 !~ /\/temp0/ {print "cp "$0" "ddir}' | parallelrun 3 ${LOG}
echo "-----------------------" >> ${LOG}
#--Wait until all jobs end
wait
echo >> ${LOG}
echo "-----------------------" >> ${LOG}
echo "Done." >> ${LOG}
unset SDIR TDIR
...
Рейтинг: 0 / 0
29.03.2012, 11:40
    #37729111
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
Aklin,

cat commandsfile | xargs -I COMMAND --max-procs=XXX bash -c COMMAND

для вашего dm5 сосбтвенно

find dir criteria | xargs --max-procs=10 md5sum
...
Рейтинг: 0 / 0
29.03.2012, 13:13
    #37729331
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
> возможно ли, что бы скрипт автоматически запускал 2-10 дочерних потоков (скажем,
> md5sum). но не более того.

man parallel ?

Это как xargs, только запускает комманду параллельно.

> то есть он запускает и сам же дожидается так, что бы количество дочек не
> превышало 2-10 штук ?

Ну если читсо bash, то запускать там ты должен сам, сколько хочешь, столько и
запустишь, а потом wait

>
> или это придется делать "руками" ?

Руками.

> количество "дочек" - определяется переменной. каждый поток - делает свою задачу
> (для каждого потока - свои аргументы, выдаваемые в цикле). для каждого скрипта -
> количество потоком определяется переменной. т.е. если один поток поддерживает до
> 3х нитей, но два скрипта, запущенные одновременно - до 6. и т.д.

Всё-таки думаю parallel.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.03.2012, 13:23
    #37729358
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
умный многопоточный bash скрипт
netwindAklin, зачем себя насиловать этим недоязыком? ты же не поддерживаешь скрипты инициализации для системы.
Когда скрипт на баше длинее трех строк - пора его переписать на нормальном языке программирования.

Модуль Parallel::ForkManager в Perl делает в точности то, что тебе нужно.

суть в использовании многочисленных утилит, когда лениво разбиратся в запуске сторонних процессов.
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / умный многопоточный bash скрипт / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]