Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Многопоточный bash-скрипт  (Прочитано 2483 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн avi9526

  • Автор темы
  • Активист
  • *
  • Сообщений: 618
  • ахтыжъёшкинкот
    • Просмотр профиля
    • Блог av9526
Многопоточный bash-скрипт
« : 18 Февраля 2013, 04:00:46 »
Нашел как-то скритп (userbase.kde.org)
Код: (bash) [Выделить]
#!/bin/bash

NUMCPU="$(grep ^processor /proc/cpuinfo | wc -l)"

find . -type f -regextype posix-awk -iregex '.*\.(mp3|ogg|flac|wma)' | while read i ; do
while [ `jobs -p | wc -l` -ge $NUMCPU ] ; do
sleep 0.1
done

TEMP="${i%.*}.mood"
OUTF=`echo "$TEMP" | sed 's#\(.*\)/\([^,]*\)#\1/.\2#'`

if [ ! -e "$OUTF" ] ; then
moodbar -o "$OUTF" "$i" &
fi

done
и решил присобачить для своих нужд (пакетное конвертирование svg → pdf) и вроде ясно всё, кроме "sleep 0.1"

1) Чем обусловлен выбор задержки в 0.1сек? Почему не 0..10сек?
2) Может есть лучше способ?

Мой вариант для svg2pdf выглядит так
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 18 Февраля 2013, 04:07:13 от avi9526 »
Ubuntu 14.10

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: Многопоточный bash-скрипт
« Ответ #1 : 18 Февраля 2013, 09:30:01 »
полагаю, что задержка должна быть того же порядка, что и время отработки целевой команды. предполагаю, чторв этом цикле проверяется чтобы количество выполняемых заданий не превышало количество ядер процессора. если все ядра заняты - ждём пока кто-то освободит. с какой частотой проверять? ну пусть команда выполняется в среднем за Т сек - значит каждые Т сек или Т/2 или ...

 

Страница сгенерирована за 0.015 секунд. Запросов: 21.