linux - 如何使用 xargs 并行执行数千条命令?
问题描述
我目前正在循环中通过 qsub 排队一堆工作
for fn in $FNS; do
queue_job $(options_a $fn) $(options_b $fn)
done
queue_job
是一个使用 qsub 将作业排队的脚本,options_a/b 是我编写的根据文件名添加一些作业选项的函数。我以这种方式排队最多 5k 个作业,我想立即将它们全部添加到队列中(或以更大的块,例如 40/次)而不是循环。
我知道我可以发送线路xargs
并并行执行它们
??? | xargs -P 40 -I{} command {}
但我不确定如何将我的 for 循环翻译成xargs
解决方案
该qsub
界面允许一次提交一个作业 - 它不提供bulk
提交,这将限制并行提交作业的优势(作业提交通常很快)。
对于特定情况,有两个 (bash) 函数(即options_a
和options_b
),它们将根据文件名扩展为作业特定参数。正如评论所建议的那样,这可能会限制使用 xargs 直接执行 - 这些函数不太可能在路径中可用。
选项:
为其创建一个包装器,该包装器queue_job
将获取(或包含)这些功能。使用来自 xargs 的包装器
xargs -P40 -I{} queue_job_x1 '{}'
queue_job_x1
#! /bin/bash
function options_a {
...
}
function option_b {
...
}
queue_job $(options_a $fn) $(options_b $fn)'
将相关函数放入.sh
文件中可能是个好主意,该文件可以由多个脚本获取。
推荐阅读
- python - Paramiko ssh linux命令执行没有结果
- php - PrestaShop 中的 PHP 权限被拒绝,甚至 chmod 777 都没有工作
- r - R中不存在标头
- javascript - UTF8 Fancytext 到 Javascript 中的字母数字
- reactjs - Yield 调用返回一个承诺
- python-3.x - how to properly import files in python3
- spring - Spring @Autowired Interface conditional resolution at runtime via CLI
- python - 处理来自包/模块的错误时如何处理 Python 异常
- bash - How to let user quit the process of specific command in bash
- c# - how to remove WCF service virtual directory in IIS