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

Python递归限制问题:asyncio&aiohttp无限请求循环触发RecursionError

解决asyncio+aiohttp递归调用导致的RecursionError问题

你的问题出在main函数请求失败时递归调用自身,再加上外层的while True循环,相当于双重嵌套递归调用——每次失败都会在调用栈里新增一层main函数的调用,Python默认递归深度有限(约1000层),多次失败后就会触发RecursionError。

绝对不要尝试禁用递归限制,这会直接导致栈溢出崩溃,正确的做法是用循环代替递归,同时优化资源使用:

修正后的代码

import aiohttp
import asyncio

async def main():
    # 只创建一次ClientSession,复用连接池
    async with aiohttp.ClientSession() as session:
        while True:
            try:
                async with session.patch("https://mywebsite.com") as resp:
                    if resp.status == 200:
                        print("请求成功,退出程序")
                        return
                    else:
                        print(f' > 请求失败,状态码: {resp.status} ')
            except Exception as e:
                print(f' > 请求出错: {str(e)} ')
            # 加延迟避免频繁请求,可根据需求调整时长
            await asyncio.sleep(1)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

关键修改说明

  • 把递归调用改成async函数内部的while True循环,彻底避免调用栈堆叠
  • 将ClientSession移到内部循环外,复用连接池,减少资源消耗并提升请求效率
  • 增加全局异常捕获,处理网络超时、连接中断等非状态码类错误
  • 添加asyncio.sleep(),避免短时间内高频请求给服务器造成压力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:42:07