如何从FastAPI的处理函数异步触发Python函数,并在不等待其响应的情况下继续?[副本]

goqiplq2  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(141)

这个问题已经有答案了

How to log the return value of a POST method after returning the response?(1个答案)
2天前关闭。
我有一个FastAPI处理函数fast_api_func和另一个函数func_to_be_called,我想从fast_api_func异步触发。我不想等待结果。一旦它被触发,我想从API返回一些响应,以便func_to_be_called在后台运行,直到完成。
大概是这样的:

async def func_to_be_called():
   #do some stuff which takes time

@app.post("/fast-api-endpoint")
def fast_api_func(request: dict = Body(...)):
   func_to_be_called()
   return "Ok"

这里,响应“Ok”应该返回,而不需要等待func_to_be_called函数的执行完成。
我尝试过直接调用它,也使用了JavaScript函数和循环,但无法使其工作。它要么给出await required error,要么同步执行函数,然后返回“Ok”,要么先返回“Ok”,但后台执行不会发生。响应“Ok”应返回,而无需等待func_to_be_called函数的执行完成。
你能建议如何解决这个问题吗?

jjjwad0x

jjjwad0x1#

您可以使用后台任务

from fastapi import BackgroundTasks, FastAPI

app = FastAPI()

async def func_to_be_called():
    #do some stuff which takes time

@app.post("/fast-api-endpoint")
async def fast_api_func(bt: BackgroundTasks):
    bt.add_task(func_to_be_called)
    return "OK"

相关问题