У меня в настоящее время есть скрипт bash, script.sh, с двумя вложенными циклами. Первый перечисляет возможные значения а, а второе перечисляет возможные значения для б, какИспользование xargs для параллельных скриптов Python
#!/bin/sh
for a in {1..10}
do
for b in {1..10}
do
nohup python script.py $a $b &
done
done
Таким образом, это порождает от 100 процессов Python под управлением script.py, по одному для каждого (а, б) пару. Однако моя машина имеет только 5 ядер, поэтому я хочу ограничить количество процессов в 5, чтобы избежать перекоса/расточительного переключения. Цель состоит в том, что я всегда выполняю 5 процессов, пока не будут выполнены все 100 процессов.
xargs, кажется, один из способов сделать это, но я не знаю, как передать эти аргументы в xargs. Я проверил другие подобные вопросы, но не понимаю окружающий басский жаргон достаточно хорошо, чтобы знать, что происходит. Например, я попытался
seq 1 | xargs -i --max-procs=5 bash script.sh
, но это, кажется, не делать ничего - script.sh работает, как и раньше, и по-прежнему нерестится от 100 процессов.
Я предполагаю, что я не понимаю, как работает xargs.
Спасибо!
'xargs' не может, и не измените, как его подпроцессы * начать их собственных детей *; скорее, он обеспечивает контроль над тем, как он начинает свои подпроцессы. –
В случае с Python я бы предложил использовать модуль «многопроцессорности» Python вместо 'xargs'. Или, альтернативно, утилиту GNU 'parallels'. https://docs.python.org/3/library/multiprocessing.html – Wolph
@Wolph, я определенно согласен повторно: многопроцессорность. Что касается GNU parallel - это более сложная и более сложная кодовая база, чем «xargs», которая является моделью простоты в сравнении. Учитывая предпочтение Pythonist для простоты, я бы счел xargs очевидным выбором среди этих двух. :) –