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)
相关推荐
幸福清风3 小时前
【Python】基于Tkinter库实现文件夹拖拽与选择功能
windows·python·microsoft·tkinter
海琴烟Sunshine3 小时前
leetcode 168. Excel 表列名称 python
python·算法·leetcode
java1234_小锋4 小时前
TensorFlow2 Python深度学习 - 卷积神经网络示例2-使用Fashion MNIST识别时装示例
python·深度学习·tensorflow·tensorflow2
@sinner4 小时前
《扫雷:病毒蔓延》- 颠覆传统的动态扫雷游戏
python·游戏·pygame
愈努力俞幸运4 小时前
python 列表浅拷贝 深拷贝
python
测试老哥4 小时前
测试用例之正交试验法、功能图法
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
岁岁岁平安5 小时前
python基本数据类型、字典、 集合、条件与循环控制、函数(3)
python·学习·集合·函数·字典·python3
wan了个蛋5 小时前
使用python脚本大批量自动化处理图片上的ai水印
python
好家伙VCC6 小时前
**TensorFlow:发散创新的深度学习框架探索**随着人工智
java·人工智能·python·深度学习·tensorflow
YFLICKERH6 小时前
【多进线程】python多进线程与通信
python