Bash 파일에서 Python 스크립트를 여러 번 실행

Bash 파일에서 Python 스크립트를 여러 번 실행

다양한 매개변수를 사용하여 Python 스크립트를 여러 번 실행하고 싶습니다. 이를 위해 다음 bash 스크립트를 작성했습니다.

requests=(25 50 75 100)
factors=(3 6)
graphsizes=(25 50 75)

for request in "${requests[@]}"; do
    for factor in "${factors[@]}"; do
        for size in "${graphsizes[@]}"; do
            echo "Now Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out;
            echo nohup python3 -u main.py "$request" 50 "$factor" "$size" > ${request}_${factor}_${size}.log &
            echo "Done Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out;
        done
    done
done

;echo병렬로 실행되는 것을 원하지 않기 때문에 첫 번째와 마지막 끝에 추가했습니다 . 사실 저는 Python 스크립트에 대한 모든 호출이 main.py병렬이 아닌 순차적으로 실행되기를 원합니다. 스크립트 자체가 이미 병렬화되어 있고 경쟁 조건이 필요하지 않기 때문입니다.

;일반적으로 작업을 순서대로 실행하기 위해 a를 사용한다는 것을 알고 있지만 &nohup 줄 다음에 이 작업을 수행하면 오류가 발생합니다.

syntax error near unexpected token `;'

루프의 각 반복을 순차적으로 실행하려면 어떻게 해야 합니까?

답변1

여러 줄로 스크립트를 작성한 방식에서는 ";"이 줄 바꿈 문자로 암시됩니다. 가장 안쪽 루프 내부의 세 줄 끝에 있는 ";"을 제거하면 for스크립트가 순차적으로 실행됩니다. spec 과 do같은 줄 에 항목을 넣을 때와 같이 항목 사이에 구분선이 있어야 하는 동일한 줄로 항목을 이동하는 경우에만 ';'이 필요합니다. for아래 재작성된 스크립트의 대체 위치를 참고하세요 .do

for request in "${requests[@]}" 
do
  for factor in "${factors[@]}"
  do
    for size in "${graphsizes[@]}"
    do
        echo "Now Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out
        echo nohup python3 -u main.py "$request" 50 "$factor" "$size" > ${request}_${factor}_${size}.log 
        echo "Done Running: n = ${request}, factor = ${factor}, size = ${size}" >> nohup.out
    done
  done
done

답변2

조합 수가 늘어나면 컴퓨터가 압도당하게 됩니다.

이것이 GNU Parallel이 유용한 곳입니다:

nohup parallel -j100% --header : python3 -u main.py {request} 50 {factor} {size} '>' {request}_{factor}_{size}.log \
   ::: request 25 50 75 100 \
   ::: factor 3 6 \
   ::: size 25 50 75

CPU 코어당 하나의 작업을 실행하지 않으려면 -j100%를 변경합니다.

관련 정보