httpx.AsyncClient()的stream方法设置timeout超时

目录

问题描述

使用httpx的异步请求AsyncClient调用stream方法请求流式接口,如果接口返回内容比较慢(比如第一个字符返回用时5s),客户端主动关闭流式通道,导致当后端接口准备好数据后,返回报错"管道已关闭"

解决办法

调用stream方法增加参数timeout

复制代码
    async def get_answer(self, job, index, text, callback):
        async with httpx.AsyncClient() as c:
            try:
                url = "流式接口地址api" 
                headers = {
                    'Authorization': g.TOKEN,
                    'Clientid': g.CLIENT_SIGN,
                    "Accept": "*/*",
                    "Cache-Control": "no-store"
                }
                params = {
                    "question": text
                }
                # 重点 增加超时配置
                timeout_config = Timeout(5.0, read=10.0)  # 总超时设为5秒,但读取超时设为10秒
                async with c.stream('GET', url, headers=headers, params=params, timeout=timeout_config) as response:
                    content_type = response.headers.get('content-type', '').lower()
                    if 'text/event-stream' in content_type:     # 流式回答
                        all_answer = ""
                        async for data in EventSource(response).aiter_sse():
                            if data:
                                all_answer += data.data
               # 省略代码
            except Exception as e:
                print(e)
相关推荐
用户72497845922319 分钟前
Python 自动化办公实战教程:提升效率的秘密武器
python
一位搞嵌入式的 genius24 分钟前
最悉心的指导教程——阿里云创建ECS实例教程+Vue+Django前后端的服务器部署(通过宝塔面板)
前端·后端·python·阿里云·宝塔页面
异常君34 分钟前
Java 调用 Python:五种实用方法全面对比与实战案例
java·python
蓝婷儿1 小时前
6个月Python学习计划 Day 8 - Python 函数基础
开发语言·python·学习
l木本I1 小时前
GraphRAG: 解锁大模型对叙述性私有数据的检索能力
人工智能·python·机器学习·知识图谱
敲键盘的小夜猫2 小时前
LangChain整合Milvus向量数据库实战:数据新增与删除操作
人工智能·python·milvus
无闻墨客3 小时前
数据可视化--使用matplotlib绘制高级图表
python·机器学习·信息可视化·matplotlib·可视化·数据可视化
我想睡觉2613 小时前
Python打卡训练营Day40
开发语言·人工智能·python·深度学习·机器学习
橙色小博3 小时前
Python中openpyxl库的基础解析与代码实例
前端·python·excel·openpyxl
小叶爱吃鱼3 小时前
web自动化-Selenium、Playwright、Robot Framework等自动化框架使用场景优劣对比
python·selenium·自动化