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

使用aiohttp异步请求API时,response.json()返回协程对象问题排查

问题分析与解决方案

核心问题是你没有对response.json()进行await调用——ClientResponse.json()是一个异步协程方法,必须通过await才能获取实际的JSON数据,直接调用只会返回协程对象。

错误代码示例(问题所在)

假设你的请求逻辑类似这样(错误写法):

async def fetch_data(session, date):
    url = f"your_api_url?date={date}"
    async with session.get(url) as response:
        if response.status == 200:
            # 错误:直接返回协程对象,没有await
            return response.json()

修正后的代码

只需要在response.json()前加上await:

async def fetch_data(session, date):
    url = f"your_api_url?date={date}"
    async with session.get(url) as response:
        if response.status == 200:
            # 正确:await异步方法获取JSON结果
            return await response.json()
        else:
            # 可选:处理非200状态的情况
            return None

结合你的函数结构的完整修正示例

import asyncio
import aiohttp

async def fetch_single_date(session, date):
    # 单个日期的API请求逻辑
    api_url = f"https://your-api-endpoint.com/data?date={date}"
    async with session.get(api_url) as response:
        if response.status == 200:
            # 关键:await response.json()
            return await response.json()
        else:
            print(f"请求日期{date}失败,状态码:{response.status}")
            return None

async def executeCallAllDates(dates_list):
    # 创建aiohttp会话,复用连接提升效率
    async with aiohttp.ClientSession() as session:
        # 创建所有异步任务
        tasks = [fetch_single_date(session, date) for date in dates_list]
        # 并发执行并获取所有结果
        results = await asyncio.gather(*tasks)
        return results

def executeCallAsync(dates_list):
    # 在Databricks中运行异步事件循环
    results = asyncio.run(executeCallAllDates(dates_list))
    # 后续处理结果并存入数据湖的逻辑
    for date, data in zip(dates_list, results):
        if data:
            # 写入数据湖的代码,比如用spark.write等
            pass

额外注意事项

  • 不要混用同步和异步代码:确保所有调用异步方法的地方都在异步函数内并使用await
  • Databricks环境中,若遇到事件循环相关问题,可以尝试获取现有循环而非创建新循环:
    loop = asyncio.get_event_loop()
    results = loop.run_until_complete(executeCallAllDates(dates_list))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:32:10