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
我有一个 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