目录
问题描述
使用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)