小编Nic*_*nez的帖子

在异步环境中缓存结果

我正在 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)

python caching python-asyncio fastapi nest-asyncio

10
推荐指数
1
解决办法
1万
查看次数

在 FastAPI 应用程序中处理有条件必需的参数的最佳方法是什么?

我正在开发一个 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 上的内置功能?

python rest web-development-server pydantic fastapi

5
推荐指数
1
解决办法
4375
查看次数