使用fastapi background task踩的第一个坑
场景复原(这份代码可以和我之前的业务产生同样的效果)
1 |
|
产生的后果
本来应该是后台任务,但是这样写却会阻塞主线程,导致第二个请求到来时会需要等待第一个task完成
原因分析
task 定义为 async ,这意味着 fastapi(或者更确切地说是 starlette)将在 asyncio 事件循环中运行它。因此程序会被sleep阻塞,所以只要它正在运行,它就会阻塞事件循环。
解决方法
将task 不定义为async方法即可
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.