Python Advanced Series — Rendimiento CPU

8. Paralelismo real en transformaciones

8. Real Parallelism in Transformations

Distribuye cálculos matemáticos o de limpieza de texto muy pesados entre todos los núcleos de tu procesador físico.

Distribute heavy mathematical or text-cleaning transformations across all cores of your physical processor.

⚠️ Advertencia de ciberseguridad y producción ⚠️ Cybersecurity and production warning

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos reales, ambientes de producción, APIs externas, portales con login, datos sensibles, sistemas críticos o repositorios empresariales sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios y cumplimiento de los protocolos de ciberseguridad de tu organización.

This exercise is for learning and testing only. Do not run scripts against real data, production environments, external APIs, login portals, sensitive data, critical systems, or enterprise repositories without authorization, backups, prior testing, least-privilege permissions, change control, and compliance with your organization's cybersecurity protocols.

Objetivo del ejercicio

Exercise objective

Usar joblib para procesar una lista de registros en paralelo y comparar el patrón con un procesamiento secuencial tradicional.

Use joblib to process a list of records in parallel and compare the pattern with traditional sequential processing.

Datos sintéticos

Synthetic data

idvalortexto
110 Miami
225 Hialeah
340 Doral

Ejemplo base

Base example

from joblib import Parallel, delayed

def tarea_pesada(dato):
    return dato * dato

jobs = Parallel(n_jobs=-1)
resultados = jobs(delayed(tarea_pesada)(i) for i in datos)

Resultado esperado

Expected result

valorresultado
10100
25625
401600

Script completo

Complete script

# ==========================================================
# Python Advanced Topic 08
# Real Parallelism in Transformations
# ==========================================================

# pip install joblib pandas

from joblib import Parallel, delayed
import pandas as pd
import time

df = pd.DataFrame({
    "id": [1, 2, 3, 4, 5],
    "valor": [10, 25, 40, 75, 100],
    "texto": [" Miami ", " Hialeah ", " Doral ", " Kendall ", " Homestead "]
})

def tarea_pesada(row):
    cleaned_text = row["texto"].strip().upper()
    score = row["valor"] ** 2
    return {
        "id": row["id"],
        "texto_limpio": cleaned_text,
        "score_calculado": score
    }

start = time.perf_counter()
resultados = Parallel(n_jobs=-1)(
    delayed(tarea_pesada)(row) for _, row in df.iterrows()
)
seconds = round(time.perf_counter() - start, 4)

out = pd.DataFrame(resultados)
out.to_csv("parallel_transform_results.csv", index=False)
print(out)
print(f"Seconds: {seconds}")

Salida esperada en consola

Expected console output

   id texto_limpio  score_calculado
0   1        MIAMI              100
1   2      HIALEAH              625
2   3        DORAL             1600
3   4      KENDALL             5625
4   5    HOMESTEAD            10000
Seconds: 0.04

Aplicaciones reales

Real-world applications

  • Transformaciones costosas de texto.
  • Cálculos matemáticos por registro.
  • Procesamiento de imágenes o documentos.
  • Aceleración de limpieza masiva local.
  • Heavy text transformations.
  • Per-record mathematical calculations.
  • Image or document processing.
  • Speeding up massive local cleaning.

Recomendaciones

Recommendations

  • No paralelizar tareas pequeñas innecesariamente.
  • Medir tiempo antes y después.
  • Cuidar memoria cuando n_jobs=-1.
  • Guardar logs de errores por registro.
  • Do not parallelize tiny tasks unnecessarily.
  • Measure time before and after.
  • Watch memory when using n_jobs=-1.
  • Keep per-record error logs.

Valor del tópico

Topic value

El paralelismo real convierte la computadora local en un motor de procesamiento más eficiente cuando las tareas son independientes y pesadas.

Real parallelism turns a local computer into a more efficient processing engine when tasks are independent and heavy.