증분 변수와 병렬로 스크립트 실행

증분 변수와 병렬로 스크립트 실행

여러 프로세서에서 Python 스크립트를 병렬로 실행하고 싶습니다 INPUTDIR. 나는 이것을 표현하기 위해 다음 줄을 사용합니다.

# define a function
pythonprocessing(){
   python myscript.py -i "$file" -o OUTPUTDIR -c "$var"
}

# initiate an index variable
var=0

# apply function on every file in INPUTDIR
for file in INPUTDIR/*; 
do
    var=$((var=var+1))
    pythonprocessing "$file" "$var"&
done
wait
echo check

파일 수가 INPUTDIR사용 가능한 프로세서를 초과하지 않는 한 모든 것이 잘 작동합니다. 대신, 파일 수가 이를 초과하면 하나를 받게 됩니다 memory error. 위 구현을 코어보다 많은 파일에 여러 번 적용했지만 아무런 문제도 발생하지 않았기 때문에 이유를 이해할 수 없습니다. 이 문제를 어떻게 해결할 수 있나요?

for 루프에서 변수를 증가시키는 것은 이번이 처음이며 이것이 문제의 원인인지 궁금합니다. 스크립트가 일부 임시 파일을 저장하고 다시 읽기 때문에 변수를 늘려야 하며, 변수가 없으면 파일에 명확한 이름을 부여할 수 없습니다.

답변1

GNU Parallel은 이런 종류의 작업을 위해 설계되었습니다:

# define a function
pythonprocessing(){
   file="$1"
   var="$2"
   python myscript.py -i "$file" -o OUTPUTDIR -c "$var"
}
export -f pythonprocessing
parallel pythonprocessing {} {#} ::: INPUTDIR/*

echo check

관련 정보