Solución de aborto anormal de Python ThreadPoolExecutor
Normalmente, usamos Ctrl+C para hacer que el programa active la excepción KeyboardInterrupt y finalice el programa. En la solución del grupo de subprocesos, Ctrl-C no es válido y KeyboardInterrupt se activará solo después de que las tareas de subprocesos en el grupo de subprocesos hayan terminado de ejecutarse.
El protocolo de gestión de contexto equivale a omitir implícitamente threadPool.shutdown(wait=True). Al mismo tiempo, cuando el programa complete la ejecución normal o se produzca una interrupción anormal, se llamará al método __exit__(). Siguiente La base para abortar.
Adecuado para marcos de aplicaciones WEB como Django. Viene con subprocesos múltiples. Es fácil modificar variables globales, pero preste atención a la seguridad de los subprocesos.
Cuando el programa se está ejecutando, simplemente firme = 1 o salga de.set (), y la función de trabajo omitirá la parte de operación principal y las tareas restantes del subproceso se completarán rápidamente, logrando así el propósito de abortar tareas multiproceso disfrazadas.
Cada tarea de subproceso enviada al grupo de subprocesos se agrega al grupo de subprocesos para facilitar las operaciones posteriores en la tarea. Cuando se envían todas las tareas en el bucle for, el subproceso se ejecutará en segundo plano nuevamente y el proceso se bloqueará mientras el último subproceso en threadPool sea .done(). Si el proceso está bloqueado y recibe la excepción KeyboardInterrupt de Ctrl+C mientras tanto, todas las tareas en threadPool se cancelarán de atrás hacia adelante para lograr el propósito de la suspensión.