我有一个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;)并且并行发送请求吗?
答案 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