eliminar fallos de asyncio

This commit is contained in:
Dulce
2026-03-26 11:41:52 -06:00
parent 5f41132f80
commit b0cc715eb3
8 changed files with 240 additions and 97 deletions

View File

@@ -17,13 +17,16 @@ def process_remesa_request(self, remesa_request: dict) -> dict:
Returns:
dict: Resultado del procesamiento con estado y detalles
"""
loop = asyncio.get_event_loop()
task_id = self.request.id
servicio = 5 # Código para Pedimento Remesas
pedimento_id = remesa_request.get('pedimento', {}).get('id')
organizacion_id = remesa_request.get('pedimento', {}).get('organizacion')
remesa_num = remesa_request.get('remesa', 'N/A')
# Crear un NUEVO event loop para esta tarea (evita problemas de loop cerrado)
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
# Actualizar estado a processing
loop.run_until_complete(
@@ -49,7 +52,6 @@ def process_remesa_request(self, remesa_request: dict) -> dict:
pedimento_id=pedimento_id,
organizacion_id=organizacion_id,
servicio=servicio,
result=result
)
)
@@ -60,20 +62,43 @@ def process_remesa_request(self, remesa_request: dict) -> dict:
# Actualizar estado a failed
try:
loop.run_until_complete(
update_task(
task_id=task_id,
message=f"Error al procesar remesa {remesa_num}: {str(e)}",
status="failed",
pedimento_id=pedimento_id,
organizacion_id=organizacion_id,
servicio=servicio,
error=str(e)
# Verificar si el loop aún está abierto
if not loop.is_closed():
loop.run_until_complete(
update_task(
task_id=task_id,
message=f"Error al procesar remesa {remesa_num}: {str(e)}",
status="failed",
pedimento_id=pedimento_id,
organizacion_id=organizacion_id,
servicio=servicio,
)
)
)
else:
# Si el loop está cerrado, crear uno nuevo temporal
logger.warning(f"Loop cerrado, creando loop temporal para actualizar error")
temp_loop = asyncio.new_event_loop()
asyncio.set_event_loop(temp_loop)
try:
temp_loop.run_until_complete(
update_task(
task_id=task_id,
message=f"Error al procesar remesa {remesa_num}: {str(e)}",
status="failed",
pedimento_id=pedimento_id,
organizacion_id=organizacion_id,
servicio=servicio
)
)
finally:
temp_loop.close()
except Exception as update_error:
logger.error(f"Error actualizando estado de tarea: {update_error}")
# Re-lanzar la excepción para que Celery la marque como fallida
raise
finally:
# Limpiar el event loop
if not loop.is_closed():
loop.close()