Nivel 55: demo_level55.py
Este es el nivel 55 del tour de aprendizaje.
Código Fuente
import os
import random
import time
import cv2
from wpipe import (
For,
Parallel,
Pipeline,
step,
to_obj,
)
# Configuración idéntica al main original
SIZE_CAPTURE = 50
CLASS_NAMES = [f"Class_{i}" for i in range(10)]
def generator_capture():
image = cv2.imread("images.jpeg")
if image is None: # Fallback por si no encuentra la imagen
import numpy as np
image = np.zeros((300, 300, 3), dtype=np.uint8)
for i in range(SIZE_CAPTURE):
image_tmp = image.copy()
cv2.putText(image_tmp, str(i), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
yield (i, image_tmp)
@step(name="start_capture")
@to_obj
def start_capture(context):
return {"cap": generator_capture(), "video_size": SIZE_CAPTURE}
@step(name="create_batch")
@to_obj
def create_batch(context):
try:
frame_id, frame = next(context.cap)
return {"batch": [(frame_id, frame)]}
except StopIteration:
return {"error": "Fin del generador"}
@step(name="heavy_inference")
class HeavyInference:
def __init__(self, sub_name):
self.sub_name = sub_name
@to_obj
def __call__(self, context):
# Simulamos carga de CPU real
start = time.time()
while time.time() - start < 0.05:
_ = 100 * 100
return {f"{self.sub_name}_pred": "Detected"}
if __name__ == "__main__":
os.makedirs("output/multiprocess", exist_ok=True)
pipe = Pipeline(pipeline_name="viaje_multiproceso", verbose=True)
pipe.set_steps([
start_capture,
For(
iterations=SIZE_CAPTURE,
steps=[
create_batch,
Parallel(
steps=[
HeavyInference("A"),
HeavyInference("B"),
HeavyInference("C"),
],
max_workers=3,
use_processes=True # <--- ACTIVACIÓN DE MULTIPROCESO
),
]
)
])
print("Startsndo Pipeline con Multiprocesamiento (CPU Intensive)...")
pipe.run({})
Resultado de Ejecución
Startsndo Pipeline con Multiprocesamiento (CPU Intensive)… [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. [PARALLEL] Executing 3 steps using PROCESSES (workers=3) [WARNING] Data not picklable: cannot pickle ‘generator’ object. Falling back to THREADS. viaje_multiproceso ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00