Code: Select all
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"}
< Br /> Warten auf die Erfüllung von Hintergrundaufgaben erscheint. Endlich, Das Protokoll zeigt "Warten auf die Anwendung zum Herunterfahren", und die
-Anwendung wird dann heruntergefahren. Laufen derzeit? Ich möchte die Anzahl der verbleibenden Aufgaben nach jeder Aufgabe abgeschlossen (d. H. Nach dem Druck (f "Task {task_id} abgeschlossen") .
Mein Ziel ist Um "0" am Ende zu sehen, damit alle Hintergrundaufgaben vor dem Herunterfahren der Anwendung abgeschlossen sind. zu beenden. Ich möchte jedoch sicherstellen, dass dies auch geschieht, wenn die App in einem Container in einem Kubernetes -Pod läuft. Dies ist entscheidend für die korrekte Abstimmung des Parameters des Pods (siehe die entsprechende Beendigung der Pods -Dokumentation).