【问题标题】:bash: curl parallel requests in the loopbash:在循环中卷曲并行请求
【发布时间】:2016-08-16 02:50:48
【问题描述】:

我想从 api (json) 下载超过 10 万个应用程序定义 我有一个简单的脚本:

BASE_PATCH="/media/sf_1/getappid/"

rm -rf ${BASE_PATCH}results

while read -r package <&3; do

            mkdir -p ${BASE_PATCH}results
            curl "https://api.test.com/v2/appid/${package}" -X GET -H "API-KEY: XxXxX-xXxXxXx" -H "Content-Type: application/json" --output ${BASE_PATCH}results/getappid.json

done 3<${BASE_PATCH}appIdId.json

这是有效的,但它会在每个循环中发出一个请求 - 这需要很多时间(数小时)。 所以我的想法是并行进行。 1. 从列表中获取前 5 个 ID(在文件中) 2.开始下载那5个json文件 3.完成后取下5个id

也许有人知道如何做到这一点。 我想坚持使用 curl,现在我想下载一些东西,但可能很快我需要使用 POST、PATCH 或 PUT(所以工具需要有这些选项)

【问题讨论】:

    标签: bash rest curl


    【解决方案1】:

    @Mark 建议的 Gnu 并行,或 xargs。看到这个问题 running-programs-in-parallel-using-xargs

    【讨论】:

      【解决方案2】:

      使用 GNU Parallel 可能:

      parallel -j 5 -a ${BASE_PATCH}appIdId.json curl "http://.../appid/{}" -X ....
      

      您还可以添加 -X 以在每次调用 curl 时获取尽可能多的定义,从而避免创建 100k curl 进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-20
        • 2019-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-11
        • 2018-12-25
        相关资源
        最近更新 更多