Bash 使用 GNU 并行发送多个 curl 请求

Bash sending multiple curl request using GNU parallel

我有一个 URL 列表 ( 5000+ ),我需要将 25 个 URL 并行发送到内部服务。我知道如何使用单个查询发送 URL 请求。

curl -s http://192.168.150.113:9999/app.boxx.com 

我尝试使用 GNU parallel

while true;do parallel -j25 curl -s http://192.168.150.101:9999/'{}' < list;done

GNU parllel好吗?效果很好,但我觉得响应很慢,响应类似于单个 API 请求。

相反,我们可以在每个 url 的末尾使用和号 (&) 并并行发送请求吗?

我不确定您是否充分利用了 GNU parallel 的全部潜力,达到了应该使用的程度。为了让它工作,你需要定义一个更小的工作(你可以分解的最小单位)并让它 运行 为你想要的次数。

定义一个从URL中读取的函数,假设http://192.168.150.113:9999/部分是一个固定的字符串,URL的其余部分来自一个文件,定义一个函数为

oneShot() {
    url="http://192.168.150.113:9999/"
    finalURL="$url"
    curl -s "$finalURL"   
}

并导出此函数以使其在子 shell 中可用

export -f oneShot

现在施展魔法实现并行,运行 25 个并行作业

parallel -j25 oneShot < list

Inians 的回答是完全有效的,如果你需要做更复杂的事情,这是首选。但是如果你 打算做一个 curl 你可以做:

parallel -j25 curl -s http://192.168.150.101:9999/{} < list