Nivel 135: Background para Logging/Telemetría

Objetivo

Demostrar el caso de uso más común: enviar logs/telemetría sin impactar el performance.

Código Fuente

"""
DEMO LEVEL 135: Background para Logging/Telemetría
-------------------------------------------------
Adds: Uso práctico: logging sin bloquear pipeline.
Continues: L134.

DIAGRAM:
Pipeline → Background(telemetry) → main_continues
"""

import time

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


@step(name="process_data")
def process_data(data):
    """Procesa datos."""
    print("📊 Procesando datos...")
    data["processed"] = True
    return data


@step(name="telemetry")
def telemetry(data):
    """Envía telemetría (background)."""
    print("📡 [TELEMETRY] Enviando métricas a servidor...")
    time.sleep(0.15)
    print("📡 [TELEMETRY] ✓ Métricas enviadas: cpu=45%, mem=2GB")
    return {}


@step(name="save_result")
def save_result(data):
    """Guarda resultado."""
    print("💾 Guardando resultado...")
    return data


if __name__ == "__main__":
    print(">>> DEMO 135: Background para Logging/Telemetría")
    print("=" * 50)

    start = time.time()

    pipe = Pipeline(pipeline_name="demo_135", verbose=False)
    pipe.set_steps([
        process_data,
        Background(telemetry),
        save_result,
    ])

    result = pipe.run({})

    elapsed = time.time() - start
    print(f"\n⏱️ Pipeline: {elapsed*1000:.0f}ms")
    print("💡 La telemetría se envió SIN bloquear el pipeline!")

Resultado de Ejecución


>>> DEMO 135: Background para Logging/Telemetría
==================================================
📊 Procesando datos...
📡 [TELEMETRY] Enviando métricas a servidor...
💾 Guardando resultado...
demo_135 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00

⏱️ Pipeline: 7ms 💡 La telemetría se envió SIN bloquear el pipeline!