У нас есть папка с 50 файлами данных (последовательности ДНК следующего поколения), которые необходимо преобразовать, запустив скрипт python для каждого из них. Скрипт занимает 5 часов в файле, он однопоточный и в основном связан с ЦП (ядро процессора работает на 99% с минимальным дисковым IO).Запустите 4 параллельных экземпляра сценария python в папке с файлами данных
Поскольку у меня 4-ядерная машина, я бы хотел запустить 4 экземпляра этого сценария сразу, чтобы значительно ускорить процесс.
Я предполагаю, что я мог бы разделить данные на 4 папки и запустить следующий Баш скрипт на каждой папке, в то же время:
files=`ls -1 *`
for $file in $files;
do
out = $file+=".out"
python fastq_groom.py $file $out
done
Но должно быть лучший способ запустить его на одну папку , Мы можем использовать Bash/Python/Perl/Windows для этого.
(К сожалению, делает сценарий поддерживает многопоточность это за то, что мы можем сделать)
Использование @phs xargs решение было самым простым способом для нас, чтобы решить эту проблему. Тем не менее мы просим оригинального разработчика реализовать @ Björn ответ. Еще раз спасибо!
Использование в команде ls обратных кавычках, и присвоение значения переменного для загрузки, являются частыми антипаттернами. Он будет разбиваться на имена файлов с пробелами, и он будет разбит, если у вас есть подкаталоги. Правильная идиома - 'для файла в *' - обратите внимание также на отсутствие знака доллара при присвоении имени переменной; вы используете знак доллара при интерполяции переменной. См. Также http://partmaps.org/era/unix/award.html#ls – tripleee
@triplee Спасибо за подсказку –