by Guest » 22 Feb 2025, 14:55
Die folgende run_tasks Fastapi Route Handler spielt eine Hintergrundaufgabe für jeden HTTP -Override ">
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"}
Wenn ein Sigterm Signal an den Prozess gesendet wird, der diese FastAPI -App ausführt, wird in den Protokollen die folgende Sequenz beobachtet:
< 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).
Die folgende run_tasks Fastapi Route Handler spielt eine Hintergrundaufgabe für jeden HTTP -Override ">[code]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"}
[/code]
Wenn ein Sigterm Signal an den Prozess gesendet wird, der diese FastAPI -App ausführt, wird in den Protokollen die folgende Sequenz beobachtet:
< 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).