Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿asyncio.gather falló pero las tareas hermanas siguen? Elige TaskGroup o cancelación propia

gather propaga la primera excepción sin cancelar hermanas. UsaTaskGroup para fallar juntas o conservaTask, cancela y espera la limpieza.

Diagrama para elegirTaskGroup o propiedad explícita deTask según la política de fallo.
Ilustración editorial original: decide la política antes de elegir la primitiva asyncio. Watch at Ease

asyncio.gather agrega resultados; no es un ámbito de fallo conjunto. La primera excepción llega al llamador mientras las hermanas pendientes siguen programadas. Si elFuture está terminado,cancel devuelvefalse.

Decide la política antes de programar. Si todo pertenece a una frontera de consistencia, usaTaskGroup enPython 3.11+. Para políticas selectivas, creaTask, cancela las elegidas, espera su limpieza y vuelve a lanzar.

1. Demuestra que el trabajo sobrevive

Combina una corrutina que falla pronto y otra que marca algo después. Tras la excepción, cancelagather y mantén el bucle;false y la marca reproducen la cancelación tardía.

EnCPython 3.12.14 la hermana lenta terminó; conTaskGroup quedó cancelada.

2. Elige política antes que API

Si las hermanas actualizan un resultado común y un fallo invalida el resto, usaTaskGroup.

Si son independientes o algunos errores son recuperables, conserva la propiedad de losTask.

3. Python 3.11+: usaTaskGroup

Crea todas las hermanas en el mismoTaskGroup. El primer fallo no cancelatorio cancela las restantes y espera limpieza.

Maneja tipos concretos conexcept* fuera deasync with y no traguesCancelledError.

4. Política selectiva: posee, cancela, espera y relanza

CreaTask antes degather, cancela solo las elegidas y espera todos losTask propios conreturn_exceptions=True.

Después vuelve a lanzar la causa o representa cada resultado explícitamente.

5. Verifica cancelación cooperativa

CancelledError se inyecta en unawait. Limpia entry/finally y normalmente relanza.

Prueba continuidad degather, cancelación deTaskGroup, drenaje manual, cancelación del padre y efectos laterales.

Línea temporal dondegather falla antes de que termine una tarea hermana.
Ilustración técnica original: cancelar tarde el agregado terminado no detiene a la hermana. Watch at Ease