Bash使用GNU parallel发送多个curl请求

时间:2018-06-04 07:12:38

标签: bash shell 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请求。

相反,我们可以在每个网址的末尾使用&符号(&amp;)并且并行发送请求吗?

2 个答案:

答案 0 :(得分:3)

我不确定你是否正在使用GNU并行的全部潜力到应该使用的程度。要使它工作,你需要定义一个较小的作业(你可以分解的最小的单位)并让它运行你想要的次数。

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

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

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

export -f oneShot

现在可以实现并行性的魔力,并行运行25个作业

parallel -j25 oneShot < list

答案 1 :(得分:3)

Inians的答案是完全有效的,如果你需要做一些更复杂的事情,那就是首选。但如果你要做一个curl,你可以这样做:

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