【问题标题】:Bash sending multiple curl request using GNU parallelBash 使用 GNU 并行发送多个 curl 请求
【发布时间】:2018-06-05 19:59:03
【问题描述】:

我有一个 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 的末尾使用与号 (&) 并并行发送请求吗?

【问题讨论】:

  • 您可能还想查看xargs-P(又名--max-procs)选项

标签: bash shell gnu-parallel


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    export -f oneShot
    

    现在用魔法来实现并行性,并行运行 25 个作业

    parallel -j25 oneShot < list
    

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 2021-02-17
      • 2013-12-09
      相关资源
      最近更新 更多