FastAPI - 我应该异步记录吗?

FastAPI - should I log asynchronously?

提问人:muliku 提问时间:4/13/2022 更新时间:4/13/2022 访问量:2735

问:

我有一个使用 FastAPI 编写的 python Web 应用程序(通过 uvicorn 运行)。在我的应用程序中,我使用的是标准模块,该模块使用 .由于我正在登录文件,因此我担心性能。假设我的函数中有 3 条日志消息,每次调用端点都会调用这些消息。现在想象一下有 1000 个客户端同时请求 - 即对日志文件进行 3000 次写入。loggingTimedRotatingFileHandler/test/test

我担心这会阻碍应用程序的性能,因为 IO 任务很耗时。我是否应该使用某种形式的异步日志记录?也许打开一个新线程来写入文件?我试着在谷歌上搜索答案,但我没有找到标准化的方法。那么它甚至需要吗?如果是,我应该如何处理?谢谢!

Python 日志记录 io fastapi uvicorn

评论

1赞 Emmanuel-Lin 4/13/2022
My2cts,避免过早优化。您的 API 是否太慢了,无法满足您的需求?是否因为日志记录而太慢。如果没有,请不要过度优化它。
1赞 flakes 4/13/2022
此外,无论如何,对应用程序的单个实例进行 1000 次调用将很难扩展。理想情况下,应在不同的 VM/容器上使用 Web 应用程序的多个实例进行水平缩放,以实现更高的吞吐量。
3赞 Chris 4/13/2022
请查看此答案,该答案使用后台任务来记录数据(因此,日志记录在返回响应后进行)。如果你需要在函数中启动一个新的线程,看看这个答案。注意:异步并不意味着多线程。请看这里了解 / 的概念。background taskasyncawait
0赞 Erik Aronesty 10/6/2023
我尝试了 AIOLOGGER 工具,它似乎有很大帮助,每秒允许更多连接

答: 暂无答案