fastapi启动后台函数,但该函数执行中不能再次启动,直到函数运行完成才能再次使用
时间: 2023-06-25 10:05:24 浏览: 170
你可以使用 Python 的 `asyncio` 模块创建一个异步函数来实现这个需求。具体代码如下:
```python
import asyncio
from fastapi import FastAPI
app = FastAPI()
async def background_task():
while True:
# 执行一些后台任务
print("Background task running...")
await asyncio.sleep(10)
@app.on_event("startup")
async def startup_event():
asyncio.create_task(background_task())
@app.post("/some-endpoint")
async def some_endpoint():
# 执行一些操作
print("Some endpoint called.")
```
在这个例子中,我们创建了一个名为 `background_task` 的异步函数,用于执行一些后台任务。在应用启动时,我们调用 `asyncio.create_task` 函数创建一个新的任务,并将 `background_task` 函数作为参数传递给它,从而在后台运行该函数。在 `some_endpoint` 函数中,我们处理客户端的请求,并执行一些操作,但是这个函数不会阻塞 `background_task` 的执行。
请注意,在这个例子中,`background_task` 函数将一直运行,直到应用被关闭,因为我们使用了一个无限循环。如果你想在某个条件成立后停止 `background_task` 的执行,你可以在函数中添加对应的逻辑。
阅读全文