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)
相关推荐
一个小浪吴啊19 分钟前
Java使用itext pdf生成PDF文档
java·python·pdf·itext·itextpdf
yzx99101339 分钟前
软件技术专业的出路在哪
人工智能·python·算法·机器学习
程序边界1 小时前
Python编程语言:2025年AI浪潮下的技术统治与学习红利
人工智能·python·学习
西猫雷婶2 小时前
python学智能算法(十五)|机器学习朴素贝叶斯方法进阶-CountVectorizer多文本处理
人工智能·python·深度学习·机器学习·scikit-learn
里探3 小时前
自定义Django rest_framework中response的示例
后端·python·django
aiweker3 小时前
python web开发-Flask 蓝图(Blueprints)完全指南
前端·python·flask
gohacker4 小时前
Python 自动化运维与DevOps实践
运维·python·自动化
superkcl20229 小时前
【JAVA】【Stream流】
java·windows·python
明月与玄武10 小时前
Python爬虫工作基本流程及urllib模块详解
开发语言·爬虫·python
一ge科研小菜鸡10 小时前
编程语言的演化与选择:技术浪潮中的理性决策
java·c语言·python