Actualmente estamos manteniendo un "servidor web" de Python de cosecha propia, en el que generar la respuesta para algunas solicitudes puede llevar mucho tiempo, principalmente debido a cálculos pesados: estas solicitudes son básicamente publicaciones con tiempos de espera muy largos (piense minutos a decenas de minutos).
Un problema de esta arquitectura es que a veces existe la necesidad de cancelar dicha solicitud, por ejemplo, el usuario notó un error al configurar la solicitud. Actualmente, la cancelación es otra solicitud, que cancela la solicitud de larga ejecución, pero hay muchas lagunas, por ejemplo, ¿qué sucede si el cliente simplemente cierra el sitio web?
Actualmente, estamos planeando retirar la abominación local de un servidor web y cambiar a algo sensato, por ejemplo, Flask ejecutándose dentro de un IIS usando wfastcgi. Debido a razones políticas, IIS está configurado, por lo que cambiar a algo como gunicorn está fuera de la ventana.
Todo el desarrollo se ha estancado en eso porque nadie tiene una idea de cómo matar los procesos ejecutados por (w) fastcgi; esa preocupación simplemente no es parte de la especificación fastcgi.
Mi sensación es que un intento de construir algo que incorpora eso es un error: preferiría una solución en la que el servidor simplemente descargue esas tareas intensivas de computación a algún servidor en segundo plano (¿matraz + apio?) Y las encuestas de front-end para eso.
Desafortunadamente, la antigua solución estuvo en vigencia durante tanto tiempo que algunos desarrolladores quieren retener el comportamiento a toda costa.
Al no ser un servidor web, me gustaría obtener algunos consejos / patrones sobre cómo podrían ser las soluciones sensatas para tal problema.