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
| Capa | Implementación |
|---|---|
| Base abstracta | BaseJobQueue (back/dependencies/job_queues/base_job_queue.py) |
| Implementación concreta | HueyJobQueue (back/dependencies/job_queues/huey_job_queue.py) |
| Almacenamiento | SQLite en ~/.DashAI/job_queue.db (separado de la BD principal) |
| Serialización | dill (maneja objetos Python complejos como lambdas) |
Cómo Funciona la Cola
-
Un endpoint de la API llama a
job_queue.put(job), que encola el trabajo y devuelve un ID de trabajo de inmediato. -
El hilo consumidor de Huey (iniciado al arrancar la aplicación) recoge el trabajo y llama a
job.run(). -
El ciclo de vida del trabajo se rastrea mediante señales de Huey y una tabla
task_copy:Señal Actualización de estado SIGNAL_ENQUEUEDnot_startedSIGNAL_EXECUTINGstartedSIGNAL_COMPLETEfinishedSIGNAL_ERRORerror -
El frontend consulta
GET /api/v1/job/status/{job_id}para rastrear el progreso.
Métodos Clave
| Método | Descripció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 trabajo | Propósito |
|---|---|
ModelJob | Entrenar un modelo y calcular métricas |
ExplorerJob | Ejecutar una exploración/visualización de datos |
ExplainerJob | Generar explicaciones del modelo (SHAP, etc.) |
PredictJob | Ejecutar predicciones sobre nuevos datos |
ConverterJob | Aplicar transformaciones de datos al dataset de un Notebook |
GenerativeJob | Manejar interacciones con modelos generativos |
DatasetJob | Cargar 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.