阅读现有问题,我仍然不确定是否可以在FastAPI中重新加载所有Worker进程的状态。
Bellow是一个简化的应用程序草图:
some_dict = load_data(path)
server = Server(some_dict)
app = FastAPI()
app.include_router(server.router)
uvicorn.run(app, ...)
服务器:
class Server:
def __init__(self, some_dict: Dict[str, ...]):
self.router = APIRouter()
self.router.add_api_route("/bar", self.bar, methods=["POST"])
self.some_dict = some_dict
def bar(self, text: str):
pass
是否有一种方法可以定期从磁盘重新加载这个字典,以便所有的工作者和所有的线程都可以安全地看到更改?带或不带FastAPI内置。
FastAPI后台任务是在每个worker中运行,还是在单个(单独)进程中运行?
我想避免重新加载服务器,而是构建单独的dict示例并替换如下所示的引用:
# this should be the only place to update state of some_dict
class Server:
def reload(self,..):
data = load_from_disk()
some_dict = build_from_data(data)
self.some_dict = some_dict
解决这个问题的最简单的例子是什么?如果工作人员短暂地不同步,也没关系
value对象很复杂,虽然它可以放在Redis中,但我正在寻找是否可以首先从FastAPI中实现。
1条答案
按热度按时间yvfmudvl1#
与定期重新加载dict不同,您可能希望让它检查是否需要在您访问它时从磁盘重新加载数据。
我没有测试过这个,但理论是存在的。..