是否可以并行化以下代码?
for word in $(cat FileNames.txt)
do
for i in {1..22}
do
Rscript assoc_test.R...........
done >> log.txt
done
我一直在尝试并行化它,但到目前为止并不幸运。我尝试在Rscript assoc_test.R...........
周围放置()
,然后是&
,但它没有给出结果,日志文件结果是空的。任何建议/帮助将不胜感激。蒂亚。
您可以更改脚本以输出要运行的命令,并将结果馈送到 GNU 并行中:
for word in $(cat FileNames.txt)
do
for i in {1..22}
do
echo Rscript assoc_test.R........... > log.$word.$i
done
done | parallel -j 4
一些细节:
parallel -j 4
将一次保持 4 个作业运行 - 将 4 替换为要使用的 CPU 数量。- 请注意,我将输出重定向到
log.$word.$i
并使用>
转义重定向运算符>
。我需要测试并确保它有效,但关键是,由于您要并行,因此您不想将所有输出混在一起。 - 确保你逃脱了
echo
可能解释的任何其他内容。输出应该是parallel
可以运行的有效命令行。
作为parallel
的替代方法,也可以使用xargs -i
。有关详细信息,请参阅此问题。
GNU Parallel 用于替换循环,因此双循环可以替换为:
parallel Rscript assoc_test.R... > log.{1}.{2} :::: FileNames.txt ::: {1..22} > log.txt