fastapi里的background实现逻辑

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里的

  • 然后, 这个__call__方法循环取出每一个task

    image.png

  • 最后在这里真正的用心的线程来跑后台任务
  • 用的是anyio来起的线程


    image.png

你可能感兴趣的:(fastapi里的background实现逻辑)