$ ls ~yifei/notes/

FastAPI 后台任务

Posted on:

Last modified:

我们总会遇到一些比较耗时的任务,如果在一个请求内同步处理,那么用户在前台等待的时间就太长了。 这时候可以使用后台任务,FastAPI 直接内置了后台任务支持——BackgroundTasks

from fastapi import BackgroundTasks  # 注意这个 s

def send_mail(from_, to, title, content):
    """send email to somebody"""

@app.post("/articles")
def create_article(req: Article, bt: BackgroundTasks):
    bt.add_task(send_mail, "me@example.com", "you@example.com", title="hello", content="world")
    article = article_dal.create(req)
    return article

只要在参数中加上 BackgroundTasks 这个参数,然后调用 add_task 就好了,它的第一参数是要 调用的函数,后面是要传递个这个函数的参数:*args**kwargs。FastAPI 会在发送响应之后 再去异步运行要执行的操作,而不会阻塞。

最后需要说明的是,FastAPI 中的 BackgroundTasks 世界上实际上直接来自 Starlette,没有任何 不同。

参考

  1. https://fastapi.tiangolo.com/tutorial/background-tasks/
WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站