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

使用python-gql的httpx异步传输执行批量请求时出现AttributeError错误

使用python-gql的httpx异步传输执行批量请求时出现AttributeError错误

看起来你遇上的问题是因为AsyncClientSession确实没有execute_batch这个方法——别担心,我来帮你梳理清楚问题根源和解决办法!

问题原因

你可能是记错了API方法,或者混淆了旧版本的python-gql用法。在当前的python-gql及gql-transport-httpx版本中,AsyncClientSession并不提供execute_batch这个方法。想要实现异步批量请求,我们需要根据你的GraphQL服务端支持情况,选择两种不同的方案。

解决方案

方案1:并发执行独立请求(适用于服务端不支持批量请求)

如果你的GraphQL服务端不接受批量请求(即不能一次发送多个请求对象的数组),我们可以用asyncio.gather来并发执行多个独立的execute调用,这样能达到批量处理的效果:

from gql import Client, GraphQLRequest
from gql.transport.httpx import HTTPXAsyncTransport
from itertools import batched
import asyncio

async def main():
    async with Client(
        transport=HTTPXAsyncTransport(url=GQL_URL, headers=GQL_HEADERS, timeout=3000),
    ) as session:
        # 生成所有需要执行的请求,按1000条数据分批次
        all_requests = [
            GraphQLRequest(document=QUERY, variable_values=batch_vars)
            for batch_vars in batched(DATA, 1000)
        ]
        # 并发执行所有请求
        results = await asyncio.gather(*(session.execute(req) for req in all_requests))
        print(results)

asyncio.run(main())

这种方式相当于同时发起多个独立的GraphQL请求,适合大多数场景,而且不需要服务端做特殊配置。

方案2:使用批量传输(适用于服务端支持批量请求)

如果你的GraphQL服务端明确支持批量请求(可以一次接收一个包含多个请求对象的数组),那我们可以使用专门的批量传输类来优化请求:

from gql import Client, GraphQLRequest
from gql.transport.httpx import HTTPXAsyncBatchTransport  # 替换为批量传输类
from itertools import batched
import asyncio

async def main():
    async with Client(
        transport=HTTPXAsyncBatchTransport(url=GQL_URL, headers=GQL_HEADERS, timeout=3000),
    ) as session:
        # 生成一个批次的请求列表
        batch_requests = [
            GraphQLRequest(document=QUERY, variable_values=batch_vars)
            for batch_vars in batched(DATA, 1000)
        ]
        # 直接传入请求列表给execute方法
        results = await session.execute(batch_requests)
        print(results)

asyncio.run(main())

额外提示

别忘记先确认你的依赖包是最新版本,避免因为版本过旧导致功能缺失:

pip install --upgrade gql gql-transport-httpx

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:48:10