gpt4 book ai didi

linux - 如何使用 xargs 并行执行数千个命令?

转载 作者:行者123 更新时间:2023-12-02 07:35:10 27 4
gpt4 key购买 nike

我目前正在循环中通过 qsub 对一堆作业进行排队

for fn in $FNS; do
queue_job $(options_a $fn) $(options_b $fn)
done

queue_job 是一个使用 qsub 对作业进行排队的脚本,而 options_a/b 是我编写的函数,用于根据文件名添加一些作业选项。我以这种方式排队最多 5k 个作业,我想立即将它们全部添加到队列中(或以更大的 block ,例如 40 个/次)而不是循环添加。

我知道我可以将行发送到 xargs 并并行执行它们

??? | xargs -P 40 -I{} command {}

但我不确定如何将 for 循环转换为 xargs

最佳答案

qsub 接口(interface)允许一次提交一个作业 - 它不提供批量提交,这将限制并行提交作业的优势(作业提交是通常很快)。

对于特定情况,有两个 (bash) 函数(即 options_aoptions_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 文件中可能是一个好主意,该文件可以由多个脚本获取。

关于linux - 如何使用 xargs 并行执行数千个命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59186539/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com