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.