You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows批处理中并行成对调用CURL接口?

批量并行调用接口的Bat脚本解决方案

需求说明

现有本地接口http://127.0.0.1:5001/my-script,需调用页码1到50的接口。原脚本为串行逐个调用,每次调用后等待10秒。现要求改为成对并行调用:同时执行页码1和2,待两者全部完成后等待10秒,再执行3和4,依此类推。

原串行脚本

@echo off
for /l %%i in (1,1,50) do (
    echo Page number: %%i
    curl -s -o nul --max-time 120 http://127.0.0.1:5001/my-script?pageNumber=%%i
    timeout /t 10
)

失败尝试的问题

之前用&连接两个curl命令的写法,虽能并行启动请求,但脚本会直接执行后续的timeout,不会等待两个curl进程全部完成,无法保证每对页码处理完毕后再进入下一轮。

正确实现脚本

@echo off
setlocal EnableDelayedExpansion

:: 遍历奇数页码,每次处理一对(当前页码+下一页)
for /l %%i in (1,2,50) do (
    set /a next=%%i+1
    echo 正在并行处理页码 %%i 和 !next!
    
    :: 以后台方式启动两个curl进程
    start /b "" curl -s -o nul --max-time 120 "http://127.0.0.1:5001/my-script?pageNumber=%%i"
    start /b "" curl -s -o nul --max-time 120 "http://127.0.0.1:5001/my-script?pageNumber=!next!"
    
    :: 循环检查所有curl进程是否结束
    :wait_loop
    tasklist /fi "imagename eq curl.exe" | find /i "curl.exe" >nul
    if not errorlevel 1 (
        :: 每隔1秒检查一次,避免占用过多资源
        timeout /t 1 /nobreak >nul
        goto wait_loop
    )
    
    echo 页码 %%i 和 !next! 处理完成,等待10秒进入下一轮
    timeout /t 10
)

:: 处理总页数为奇数的情况(本例50为偶数,可忽略;若为奇数需保留)
:: if !next! gtr 50 (
::     echo 处理最后一个单独页码 50
::     curl -s -o nul --max-time 120 "http://127.0.0.1:5001/my-script?pageNumber=50"
::     timeout /t 10
:: )

endlocal

关键说明

  1. 后台启动进程:用start /b命令让curl在后台运行,实现两个请求并行执行
  2. 等待进程结束:通过tasklist检查系统中是否还有curl进程,直到全部结束才继续后续逻辑
  3. 奇数页码兼容:如果总页数是奇数,最后会剩下一个单独页码,可取消注释最后一段代码处理该情况
  4. 延迟变量扩展:启用EnableDelayedExpansion确保循环中!next!变量能正确获取实时计算的值

内容的提问来源于stack exchange,提问作者Andurit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:29:59