여러 프로세서에서 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