我正在 FastAPI 端点中工作,该端点进行 I/O 绑定操作,该操作是异步的以提高效率。但是,这需要时间,所以我想缓存结果以在一段时间内重复使用。
我目前有这个:
from fastapi import FastAPI
import asyncio
app = FastAPI()
async def _get_expensive_resource(key) -> None:
await asyncio.sleep(2)
return True
@app.get('/')
async def get(key):
return await _get_expensive_resource(key)
if __name__ == "__main__":
import uvicorn
uvicorn.run("test:app")
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用该cachetools包来缓存结果,并且我尝试了如下操作:
import asyncio
from cachetools import TTLCache
from fastapi import FastAPI
app = FastAPI()
async def _get_expensive_resource(key) -> None:
await asyncio.sleep(2)
return True
class ResourceCache(TTLCache):
def __missing__(self, key):
loop = asyncio.get_event_loop()
resource = loop.run_until_complete(_get_expensive_resource(key))
self[key] = resource
return resource
resource_cache …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 FastAPI 应用程序。我有以下架构
class Address(BaseModel):
address_string: str = Field(None)
address_street: str = Field(None)
addres_number: str = Field(None)
Run Code Online (Sandbox Code Playgroud)
如果address_street和addres_number不存在,我喜欢有条件地需要字段address_string,反之亦然,如果address_street不存在,则需要address_street和address_number。
目前,我通过将所有字段设置为可选并使用 root_validator 来检查一致性来管理此问题,并在所涉及字段的描述中记录此条件要求。
有没有更简洁的方法来管理 FastAPI 上的内置功能?