Fastapi框架里自带了处理后台任务的功能, 文档在https://fastapi.tiangolo.com/zh/tutorial/background-tasks/?h=back
好奇它的实现方式, 于是看了下源代码, 记录一下, fastapi是封装了starlette, 所以这部分逻辑也在starlette的源代码里
-
在starlette的response.py里
image.png -
Response类的
__call__
方法, 会调用self.background
self.background
是一个BackgroundTasks
类
这个类有一个add_task
方法, 就是官方文档里的把后台函数添加到BackgroundTasks
里的 -
然后, 这个
image.png__call__
方法循环取出每一个task - 最后在这里真正的用心的线程来跑后台任务
-
用的是anyio来起的线程
image.png
网友评论