Код: Выделить всё
import asyncio
import time
from fastapi import APIRouter
from starlette.background import BackgroundTasks
router = APIRouter()
async def background_task(sleep_time: int, task_id: int):
print(f"Task {task_id} started")
await asyncio.sleep(sleep_time) # Simulate a long-running task
print(f"Task {task_id} completed")
@router.post("/run-tasks")
async def run_tasks(background_tasks: BackgroundTasks, sleep_time: int):
background_tasks.add_task(background_task, sleep_time, int(time.time()))
print(len(background_tasks.tasks))
return {"message": "NEW SLEEP query arg background task started"}
- Появляется сообщение «Ожидание завершения фоновых задач».
- После этого в журнал записываются сообщения типа «Задание {some_id} выполнено».
- Наконец, в журнале отображается сообщение «Ожидание завершения работы приложения», после чего
приложение закрывается.
Моя цель — чтобы увидеть «0» в конце, чтобы быть уверенным, что все фоновые задачи завершены до завершения работы приложения.
Я понимаю, что приложение FastAPI, работающее на Python, должно ожидать выполнения всех фоновых задач. закончить. Однако я хочу, чтобы это также происходило, когда приложение запускается внутри контейнера внутри модуля Kubernetes. Это крайне важно для правильной настройки параметра TerminationGracePeriodSeconds модуля (см. соответствующую документацию по прекращению работы модулей).
Подробнее здесь: https://stackoverflow.com/questions/788 ... pi-applica