Maison > développement back-end > Tutoriel Python > Comment exécuter des tâches en arrière-plan dans FastAPI ?

Comment exécuter des tâches en arrière-plan dans FastAPI ?

Susan Sarandon
Libérer: 2024-12-18 12:03:18
original
553 Les gens l'ont consulté

How to Run Background Tasks in FastAPI?

Exécution de tâches en arrière-plan dans FastAPI

Dans FastAPI, les développeurs peuvent rencontrer un scénario dans lequel ils doivent exécuter une fonction en arrière-plan, sans rapport avec leur API. Pour y parvenir, il est nécessaire d'utiliser des mécanismes de threading.

Solution 1 : Démarrer le fil avant uvicorn.run

Une approche consiste à démarrer le fil de discussion avant d'invoquer uvicorn.run, car uvicorn.run bloque le fil. Cette approche peut être mise en œuvre comme suit :

import time
import threading
from fastapi import FastAPI
import uvicorn

app = FastAPI()
class BackgroundTasks(threading.Thread):
    def run(self,*args,**kwargs):
        while True:
            print('Hello')
            time.sleep(5)
  
if __name__ == '__main__':
    t = BackgroundTasks()
    t.start()
    uvicorn.run(app, host="0.0.0.0", port=8000)
Copier après la connexion

Alternativement, les développeurs peuvent tirer parti de l'événement de démarrage de FastAPI pour lancer le fil de discussion avant le démarrage de l'application :

@app.on_event("startup")
async def startup_event():
    t = BackgroundTasks()
    t.start()
Copier après la connexion

Solution 2 : Événement Planificateur

Une autre option consiste à implémenter un planificateur d'événements récurrents pour l'arrière-plan tâche :

import sched, time
from threading import Thread
from fastapi import FastAPI
import uvicorn

app = FastAPI()
s = sched.scheduler(time.time, time.sleep)

def print_event(sc): 
    print("Hello")
    sc.enter(5, 1, print_event, (sc,))

def start_scheduler():
    s.enter(5, 1, print_event, (s,))
    s.run()

@app.on_event("startup")
async def startup_event():
    thread = Thread(target=start_scheduler)
    thread.start()

if __name__ == '__main__':
    uvicorn.run(app, host="0.0.0.0", port=8000)
Copier après la connexion

Solution 3 : Utilisation de la boucle d'événements

Pour les tâches en arrière-plan asynchrones (fonctions de définition asynchrones), les développeurs peuvent utiliser la boucle d'événements actuelle avec l'asyncio Fonction .create_task() :

from asyncio import create_task
from fastapi import FastAPI

app = FastAPI()

@app.on_event("startup")
async def startup_task():
    await create_task(print_task(5))
Copier après la connexion

Dans cette approche, la boucle d'événements est créée lors du lancement de l'uvicorn serveur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal