eliminar fallos de asyncio
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user