Tengo una aplicación fastapi que es muy pesada en el cálculo de subprocesos múltiples. Es decir, algunas solicitudes, cuando se procesan, crean muchos subprocesos nuevos para que se complete el proceso. Estas solicitudes devuelven un "ok" rápidamente, pero luego continúan procesándose en segundo plano.
Además, recibo muchas solicitudes de verificación de estado (por ejemplo, si el proceso anterior ha finalizado y "consígueme los resultados del proceso anterior"). algunas de las solicitudes de "obtención de resultados" crean nuevas conexiones a una base de datos externa.
Esto parece crear una sobrecarga de solicitudes, y muchas de ellas se agotan.
Quiero poder de alguna manera "dividir" mi grupo de subprocesos, de modo que siempre haya un "ancho de banda" para verificar el estado y obtener resultados (con su llamada db), mientras haya suficientes "subprocesos" para que el procesamiento continúe en el fondo sin que nada se atasque.
Examiné la limitación de la tasa de solicitudes, pero no parece abordar todos los problemas (simplemente rechaza algunas solicitudes en lugar de agotarlas). También observé la opción --limit-concurrency de uvicorn, pero no estoy seguro de cuál sería su efecto en la cantidad de trabajadores/hilos que usa mi aplicación en segundo plano.
Cualquier idea/referencia será bienvenida