我想在多个处理器上并行运行 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