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

如何向同一页面发送多次HTTP请求且不造成过高服务器CPU占用

优化方案

你当前代码的核心问题是循环内无间隔发送请求,短时间会产生大量请求打到目标服务器,导致服务端负载升高。可以通过以下方案优化:

  • 增加固定请求间隔,降低请求频率
    这是成本最低、见效最快的优化方式,每次请求处理完成后休眠固定时长,将请求频率控制在合理范围内,避免对服务端造成冲击。可根据业务对结果的敏感度调整间隔时长,比如要求低延迟的场景可以设为0.5秒,无特殊要求的场景设为1-5秒都可以。
    同时你原有代码存在time模块被变量覆盖的风险,以及缺少单请求超时控制、请求异常处理的问题,优化后的代码示例如下:
import time
import requests
import re

# pattern、matches初始化逻辑保持不变
if matches is None:
    txt = "No answer til now"
    print(txt)
    Solution = False
    start = time.time()
    interval = 0
    # 自定义请求间隔,单位:秒
    gap = 1
    while interval < 180:
        try:
            # 增加单请求超时,避免网络波动导致整体逻辑超时不准
            response = requests.get("page address", timeout=10)
            # 主动抛出4xx、5xx类的请求错误
            response.raise_for_status()
            subject = response.text
            matches = re.search(pattern, subject, re.IGNORECASE)
            if matches is not None:
                Solution = matches.group(1)
                # 修正变量名,避免覆盖导入的time模块
                cost = "{:.2f}".format(time.time()-start) 
                txt = f"Found an answer {Solution} time needed : {cost}"
                print(txt)
                break
        except requests.exceptions.RequestException as err:
            # 可根据需求调整错误处理逻辑,此处仅打印日志继续重试
            print(f"请求异常:{str(err)}")
        # 请求结束后休眠,降低频率
        time.sleep(gap)
        interval = time.time()-start
else:
    Solution = matches.group(1)
  • 异步请求方案(对应你提到的PHP curl_multi_select 思路)
    PHP的curl_multi_select是异步IO实现多请求监听的方案,Python场景下可以使用aiohttp+asyncio实现同等能力,该方案更适合你后续需要同时监听多个目标页面的场景,资源占用比多线程同步请求更低。如果你的需求只有单个目标页面,使用上面的同步加休眠方案就足够,不需要额外引入异步复杂度。

内容的提问来源于stack exchange,提问作者A.P Carvalho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:01