Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

774
Vistas
Cómo enviar una respuesta solo después de que se hayan completado todas las tareas en segundo plano en FastAPI

Usando python 3x en una Mac. Tengo un servidor FastAPI con un punto final. En este punto final, quiero poder ejecutar algunas tareas en segundo plano. Una vez que se completan, realiza algunos cálculos y solo luego envía una respuesta HTTP.

Lo que tengo es lo siguiente:

 import asyncio import uvicorn from fastapi import BackgroundTasks, FastAPI app = FastAPI() async def log(message: str): print(f"start to process message: {message}") if message == "aaaaa": await asyncio.sleep(10) else: await asyncio.sleep(3) print(f"processed {message}") async def process(): tasks = [log('aaaaa'), log('bbbbb')] print("start processing the tasks") await asyncio.gather(*tasks) print(" we are done with all the tasks") @app.post("/upload-to-process") async def upload(background_tasks: BackgroundTasks): background_tasks.add_task(process) return {"result": "all tasks are completed successfully successfully"} if __name__ == "__main__": uvicorn.run(app, host="localhost", port=8001)

lo anterior lo que hace es enviar el resultado inmediatamente y no esperar a que se completen las tareas.

¿Cómo cambio el código anterior para esperar hasta que se completen todos los fondos y solo luego enviar la respuesta?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Realmente no tiene sentido esperar las tareas en segundo plano , ya que se ejecutan por definición en segundo plano.

Si lo que quieres es ejecutar la función que ejecuta esas tareas de forma síncrona , es decir, no en segundo plano, puedes hacer esto:

 @app.post("/upload-to-process") async def upload(background_tasks: BackgroundTasks): await process() return {"result": "all tasks are completed successfully successfully"}

Tenga en cuenta, sin embargo, que si esas tareas tardan demasiado (esto depende de los límites de tiempo de solicitud de configuración de su servidor, que generalmente varían entre 30 segundos y 15 minutos), la solicitud se agotará.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda