Nivel 133: Múltiples Background Tasks

Objetivo

Demostrar que múltiples tareas background pueden ejecutarse simultáneamente.

Código Fuente

"""
DEMO LEVEL 133: Múltiples Background Tasks
-----------------------------------------
Adds: Múltiples tareas background ejecutándose en paralelo.
Continues: L132.

DIAGRAM:
Pipeline → [Background] → [Background] → [Background] → next
"""

import time
import threading

from wpipe import Pipeline, step
from wpipe.pipe.components.logic_blocks import Background


counter = {"value": 0}
lock = threading.Lock()


@step(name="start")
def start(data):
    """Inicio."""
    print("📌 Iniciando pipeline...")
    return {"started": True}


@step(name="task_1")
def task_1(data):
    """Tarea 1 en background."""
    with lock:
        counter["value"] += 1
    print(f"🔄 [BG-1] Contador: {counter['value']}")


@step(name="task_2")
def task_2(data):
    """Tarea 2 en background."""
    time.sleep(0.1)
    with lock:
        counter["value"] += 1
    print(f"🔄 [BG-2] Contador: {counter['value']}")


@step(name="task_3")
def task_3(data):
    """Tarea 3 en background."""
    time.sleep(0.05)
    with lock:
        counter["value"] += 1
    print(f"🔄 [BG-3] Contador: {counter['value']}")


@step(name="finish")
def finish(data):
    """Finaliza."""
    print(f"✅ Pipeline terminado. Contador final: {counter['value']}")
    return data


if __name__ == "__main__":
    print(">>> DEMO 133: Múltiples Background Tasks")
    print("=" * 50)

    start_time = time.time()

    pipe = Pipeline(pipeline_name="demo_133", verbose=False)
    pipe.set_steps([
        start,
        Background(task_1),
        Background(task_2),
        Background(task_3),
        finish,
    ])

    result = pipe.run({})

    elapsed = time.time() - start_time
    print(f"\n⏱️ Tiempo de pipeline: {elapsed*1000:.0f}ms")
    print("💡 Las 3 tareas background se ejectaron en paralelo!")
    print("💡 (Nota: Algunas pueden no completar antes de que el proceso termine)")

Resultado de Ejecución


>>> DEMO 133: Múltiples Background Tasks
==================================================
📌 Iniciando pipeline...
🔄 [BG-1] Contador: 1
✅ Pipeline terminado. Contador final: 1
demo_133 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00

⏱️ Tiempo de pipeline: 7ms 💡 Las 3 tareas background se ejectaron en paralelo! 💡 (Nota: Algunas pueden no completar antes de que el proceso termine)