Aprende a paralelizar tareas CPU-bound en Python usando multiprocessing: crear procesos, pasar trabajo por Queue y recolectar resultados.
Procesar archivos en paralelo con multiprocessing

Cuando tu tarea es pesada (codificar imágenes, comprimir, cifrar grandes volúmenes) y es CPU-bound, multiprocessing suele rendir mejor que threads.

1) Patrón básico con Queue

from multiprocessing import Process, Queue, cpu_count
from pathlib import Path

def worker(in_q, out_q):
    while True:
        item = in_q.get()
        if item is None:
            break
        path = Path(item)
        data = path.read_bytes()
        # demo: invertir bytes
        out_q.put((path.name, data[::-1]))

in_q = Queue()
out_q = Queue()

workers = [Process(target=worker, args=(in_q, out_q)) for _ in range(cpu_count())]
for w in workers: w.start()

files = ["a.jpg", "b.jpg"]
for f in files: in_q.put(f)
for _ in workers: in_q.put(None)

for _ in files:
    name, data = out_q.get()
    Path("OUT_" + name).write_bytes(data)

for w in workers: w.join()

2) Qué vigilar

  • IO vs CPU: si es IO-bound (mucho disco/red), a veces threads es suficiente.
  • Serialización: enviar objetos grandes por Queue tiene coste; pasa rutas o chunks.
  • Cierre: usa “poison pills” (None) y join().