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

如何实现带并发数量限制的多Curl并行请求?

实现带并发限制的批量curl请求处理

看起来你现在用串行的while循环处理curl请求,效率确实上不去,而且还没法控制并发数。我给你两个常用的解决方案,都是Linux/Unix下现成的工具,能轻松实现并行请求还能限制数量,避免触发服务器的反爬机制。

方法一:用xargs(系统默认自带,无需额外安装)

xargs的-P参数可以指定并行进程数,-n参数控制每次传给命令的参数个数。因为你需要同时处理unitId和unitUrl两个字段,我们可以先写一个小脚本封装逻辑,再用xargs调用它:

1. 编写处理脚本 process_url.sh

#!/bin/bash
# 接收传入的两个参数:unitId 和 unitUrl
unitId="$1"
unitUrl="$2"

# 替换成你的id存在性判断逻辑
if! [[ " ${tabAnnoncesExistantesIds[@]} " =~ " ${unitId} " ]]; then
    # 补全你的fullUnitUrl拼接逻辑
    fullUnitUrl="${unitUrl}"
    # 执行curl请求,这里可以根据需求加参数(比如保存文件、设置超时等)
    curl -s --connect-timeout 10 "$fullUnitUrl"
    # 如果需要保存到文件,可以改成:
    # curl -s --connect-timeout 10 -o "result_${unitId}.txt" "$fullUnitUrl"
fi

2. 给脚本加执行权限

chmod +x process_url.sh

3. 执行主命令

因为子进程默认不会继承父进程的数组,所以先把tabAnnoncesExistantesIds导出,再用jq提取字段传给xargs:

export tabAnnoncesExistantesIds
jq -r '.entries[] | select(.enabled != false) | "\(.id) \(.unitUrl)"' "$fileIndexFeed" | xargs -n2 -P5./process_url.sh

这里-P5表示最多同时跑5个curl请求,你可以根据服务器的容忍度调整这个数字(建议从3-5开始试)。


方法二:用GNU Parallel(更灵活,适合复杂场景)

如果你的系统没有Parallel,可以用包管理器安装:

  • Debian/Ubuntu:sudo apt install parallel
  • CentOS/RHEL:sudo yum install parallel

Parallel的语法更直观,而且自带很多实用功能(比如失败重试、进度条等)。你可以直接把逻辑写在命令里,不用单独脚本:

export tabAnnoncesExistantesIds
jq -r '.entries[] | select(.enabled != false) | "\(.id) \(.unitUrl)"' "$fileIndexFeed" | parallel -j5 '
unitId={1}
unitUrl={2}
if! [[ " ${tabAnnoncesExistantesIds[@]} " =~ " ${unitId} " ]]; then
    fullUnitUrl="${unitUrl}"
    curl -s --connect-timeout 10 "$fullUnitUrl"
fi
'

这里-j5同样是限制5个并行进程,{1}和{2}对应每行的第一个和第二个字段(也就是unitId和unitUrl)。


一些注意事项

  • 并发数调整:不要贪多!如果并发数太高,很容易被服务器判定为恶意请求而封禁IP,建议先从小数开始测试,观察服务器的响应情况再调整。
  • 错误处理:可以给curl加--fail参数,让请求失败时返回非0退出码,方便后续排查;也可以在脚本里记录失败的请求ID和URL到日志文件。
  • 数组传递:如果你的tabAnnoncesExistantesIds数组很大,导出可能不太方便,也可以把数组内容写入临时文件,在脚本里读取这个文件来判断ID是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:56:58