Nivel 140: El Zen de WPipe - Demo Final de Background Tasks
Objetivo
Llegar a la cima de La Senda del Maestro con un demo final que resume toda la funcionalidad de Background Tasks.
Conceptos Clave
Fire & Forget: Ejecución sin bloquear.
Daemon Threads: No bloquean terminación del proceso.
Error Handling Opcional: capture_error para robustez.
Universal: Funciona con funciones, tuplas, pipelines anidados, y en async.
¿Qué estamos probando?
Un pipeline completo que demuestra: 1. Múltiples backgrounds en paralelo. 2. Captura de errores sin detener. 3. Pipeline continúa normalmente.
Código Fuente
"""
DEMO LEVEL 140: Demo Final - Background Tasks
---------------------------------------------
Adds: Repaso completo de Background functionality.
Continues: L139.
DIAGRAM:
Pipeline con múltiples ejemplos de Background
"""
import time
import threading
from wpipe import Pipeline, step, Condition, Parallel
from wpipe.pipe.components.logic_blocks import Background
# Estado compartido para demostrar ejecución
execution_log = []
@step(name="start")
def start(data):
print("=" * 50)
print("🎉 DEMO FINAL - Background Tasks")
print("=" * 50)
print("\n📋 Características de Background:")
print(" • Ejecución sin bloquear el pipeline")
print(" • Retorno ignorado (no afecta datos)")
print(" • capture_error=True para manejar fallos")
print(" • Funciona con PipelineAsync")
print(" • Acepta funciones, tuplas, y pipelines anidados")
print()
execution_log.clear()
return {"started": True}
@step(name="log_task")
def log_task(data):
"""Tarea de logging en background."""
print("📝 [BG] Enviando logs...")
time.sleep(0.1)
execution_log.append("log")
@step(name="telemetry_task")
def telemetry_task(data):
"""Tarea de telemetría en background."""
print("📡 [BG] Enviando telemetría...")
time.sleep(0.1)
execution_log.append("telemetry")
@step(name="error_capture_handler")
def error_capture_handler(data, error_info):
print(f"⚠️ [HANDLER] Error capturado: {error_info.get('error_message', 'Unknown')}")
execution_log.append("error_handled")
@step(name="failing_bg")
def failing_bg(data):
"""Background que falla."""
raise RuntimeError("Error simulado")
@step(name="normal_task")
def normal_task(data):
print("✅ Tarea normal completada")
execution_log.append("normal")
@step(name="finish")
def finish(data):
print("\n" + "=" * 50)
print("📊 Ejecución completada!")
print(f" Log: {execution_log}")
print("=" * 50)
if __name__ == "__main__":
pipe = Pipeline(pipeline_name="demo_140", verbose=True)
pipe.add_error_capture([error_capture_handler])
pipe.set_steps([
start,
# Múltiples backgrounds en paralelo
Background(log_task),
Background(telemetry_task),
# Background que falla pero se captura
Background(failing_bg, capture_error=True),
# Tarea normal después de backgrounds
normal_task,
finish,
])
result = pipe.run({})
print("\n✅ Demo completado exitosamente!")
print(" - Background tasks ejecutados en paralelo")
print(" - Error capturado sin detener pipeline")
print(" - Pipeline continuó normalmente")
Resultado de Ejecución
- 📋 Características de Background:
Ejecución sin bloquear el pipeline
Retorno ignorado (no afecta datos)
capture_error=True para manejar fallos
Funciona con PipelineAsync
Acepta funciones, tuplas, y pipelines anidados
📝 [BG] Enviando logs… 📡 [BG] Enviando telemetría… ✅ Tarea normal completada
- 📊 Ejecución completada!
Log: [‘normal’]
demo_140 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
- ✅ Demo completado exitosamente!
Background tasks ejecutados en paralelo
Error capturado sin detener pipeline
Pipeline continuó normalmente
¡RECLAMA TU LOGRO!
Introduce tu nombre para desbloquear tu certificado oficial.
Certificado de Misión
WPipe Engine Certification • FINAL
Se otorga con honor a:
---
Con el rango oficial de:
Arquitecto WPipe Specialist
EMITIDO EL: --/--/----
ID: WP-140-ARQ-LIST
WISROVI SUITE • WISROVI.DEV
Oficial Product: wpipe.wisrovi.dev