複数のプロセッサで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
が利用可能なプロセッサを超えない限り、すべてがうまく機能します。代わりに、ファイル数がそれを超えると1つを受け取ります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