fastapi坑--fastapi 书写EventSourceResponse 迭代器的时候一定要加sleep
Posted xunhanliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fastapi坑--fastapi 书写EventSourceResponse 迭代器的时候一定要加sleep相关的知识,希望对你有一定的参考价值。
一定要加sleep ,否则 sse_starlette.sse 中 listen_for_disconnect 收不到 http.disconnect 信号。这个表现是服务端的sse传输不会结束,会一直传递下去(虽然客户端 close或者disconnect)。
FastAPI 异步类依赖
【中文标题】FastAPI 异步类依赖【英文标题】:FastAPI async class dependencies 【发布时间】:2020-12-10 23:08:30 【问题描述】:在 FastAPI 中,当标准函数用作依赖项时,它可以声明为常规 def
函数或异步 async def
函数。 FastAPI 声称它在任何一种情况下都会做正确的事情。
但是,以这种方式创建的依赖项不像类依赖项那样对自动完成友好。此外,类依赖项有更好的声明语法,只需指定一次依赖项的类型,FastAPI 就会找出您指的是哪个依赖项。
def read_item(common: CommonQueryParam = Depends()):
但是类依赖需要执行异步操作作为其初始化的一部分。是否可以一起使用类依赖项和异步。显然,不能将__init__
类函数声明为异步。有没有其他方法可以让它工作?
【问题讨论】:
【参考方案1】:正如您正确注意到的,__init__
必须是同步的,您不能直接在其中调用 await
。但是您可以将所有异步代码作为子依赖项并将其作为__init__
的输入。 FastAPI 将正确处理这种异步依赖。
示例:
async def async_dep():
await asyncio.sleep(0)
return 1
class CommonQueryParams:
def __init__(self, a: int = Depends(async_dep)):
self.a = a
【讨论】:
以上是关于fastapi坑--fastapi 书写EventSourceResponse 迭代器的时候一定要加sleep的主要内容,如果未能解决你的问题,请参考以下文章
python框架fastapi, AttributeError: module 'asyncio' has no attribute 'iscoroutinefunction&