Saltar al contenido principal

Sistema de Trabajos

Cola de Trabajos

La Cola de Trabajos maneja la ejecución asíncrona de tareas de larga duración. DashAI usa Huey — una cola de tareas Python ligera — respaldada por una base de datos SQLite.

Arquitectura

CapaImplementación
Base abstractaBaseJobQueue (back/dependencies/job_queues/base_job_queue.py)
Implementación concretaHueyJobQueue (back/dependencies/job_queues/huey_job_queue.py)
AlmacenamientoSQLite en ~/.DashAI/job_queue.db (separado de la BD principal)
Serializacióndill (maneja objetos Python complejos como lambdas)

Cómo Funciona la Cola

  1. Un endpoint de la API llama a job_queue.put(job), que encola el trabajo y devuelve un ID de trabajo de inmediato.

  2. El hilo consumidor de Huey (iniciado al arrancar la aplicación) recoge el trabajo y llama a job.run().

  3. El ciclo de vida del trabajo se rastrea mediante señales de Huey y una tabla task_copy:

    SeñalActualización de estado
    SIGNAL_ENQUEUEDnot_started
    SIGNAL_EXECUTINGstarted
    SIGNAL_COMPLETEfinished
    SIGNAL_ERRORerror
  4. El frontend consulta GET /api/v1/job/status/{job_id} para rastrear el progreso.

Métodos Clave

MétodoDescripción
put(job)Encolar un trabajo, devuelve el ID del trabajo
get(job_id)Obtener el estado y metadatos del trabajo
peek()Ver el siguiente trabajo sin sacarlo de la cola
is_empty()Verificar si la cola tiene trabajos pendientes
async_get(job_id)Versión asíncrona de get

El backend SQLite usa el modo Write-Ahead Logging (WAL) para un acceso concurrente seguro entre el proceso de la API y el consumidor Huey.


Trabajos

Un Trabajo encapsula una unidad de trabajo en segundo plano. Todos los trabajos heredan de BaseJob (back/job/base_job.py).

Interfaz Base

class BaseJob(metaclass=ABCMeta):
TYPE = "Job"

@abstractmethod
def run(self) -> None: ...

@abstractmethod
def set_status_as_delivered(self) -> None: ...

@abstractmethod
def set_status_as_error(self) -> None: ...

@abstractmethod
def get_job_name(self) -> str: ...

Tipos de Trabajos

Clase de trabajoPropósito
ModelJobEntrenar un modelo y calcular métricas
ExplorerJobEjecutar una exploración/visualización de datos
ExplainerJobGenerar explicaciones del modelo (SHAP, etc.)
PredictJobEjecutar predicciones sobre nuevos datos
ConverterJobAplicar transformaciones de datos al dataset de un Notebook
GenerativeJobManejar interacciones con modelos generativos
DatasetJobCargar y procesar datasets

Cada tipo de trabajo gestiona sus propias transiciones de estado en la base de datos y el manejo de errores. Cuando un trabajo falla, registra el mensaje de error en la base de datos y actualiza el estado de la entidad correspondiente a ERROR.