IOKELU
Nivel: Avanzado – Guía 9
💡 Prueba el código:
Ejecuta cualquier ejemplo en nuestra consola interactiva: Abrir consola de Python →

Paralelismo con multiprocessing en Python

El módulo multiprocessing permite ejecutar código en múltiples procesos reales, evitando el GIL y aprovechando todos los núcleos de la CPU. En esta guía aprenderás a crear procesos, usar colas, pools, comunicación entre procesos y patrones profesionales para tareas intensivas en CPU.

Tabla de contenidos

  • Procesos básicos
  • Procesos con funciones
  • Colas entre procesos
  • Pipes
  • Pool de procesos
  • Map, starmap y apply_async
  • Compartir memoria
  • Ejercicios
  • Mini‑proyecto

1. Procesos básicos

from multiprocessing import Process

def tarea():
    print("Proceso ejecutado")

p = Process(target=tarea)
p.start()
p.join()

2. Procesos con funciones

from multiprocessing import Process
import time

def contar(n):
    for i in range(n):
        print(i)
        time.sleep(0.5)

p = Process(target=contar, args=(5,))
p.start()
p.join()

3. Colas entre procesos

from multiprocessing import Process, Queue
import time

def productor(q):
    for i in range(5):
        q.put(i)
        time.sleep(1)

def consumidor(q):
    while True:
        item = q.get()
        print("Consumido:", item)

q = Queue()
Process(target=productor, args=(q,)).start()
Process(target=consumidor, args=(q,)).start()

4. Pipes

from multiprocessing import Process, Pipe

def hijo(conn):
    conn.send("Hola padre")
    conn.close()

padre, hijo_conn = Pipe()
p = Process(target=hijo, args=(hijo_conn,))
p.start()

print(padre.recv())
p.join()

5. Pool de procesos

from multiprocessing import Pool
import time

def cuadrado(n):
    time.sleep(1)
    return n * n

with Pool(4) as pool:
    resultados = pool.map(cuadrado, [1,2,3,4])
    print(resultados)

6. Map, starmap y apply_async

from multiprocessing import Pool

def sumar(a, b):
    return a + b

with Pool() as pool:
    print(pool.starmap(sumar, [(1,2), (3,4)]))

    r = pool.apply_async(sumar, (10, 20))
    print(r.get())

7. Compartir memoria

from multiprocessing import Process, Value

def incrementar(v):
    for _ in range(1000):
        v.value += 1

v = Value('i', 0)

p1 = Process(target=incrementar, args=(v,))
p2 = Process(target=incrementar, args=(v,))

p1.start(); p2.start()
p1.join(); p2.join()

print(v.value)

8. Ejercicios

9. Mini‑proyecto: Procesador paralelo de imágenes

from multiprocessing import Pool
import time

def procesar(img):
    print("Procesando", img)
    time.sleep(1)
    return img + "_ok"

imagenes = ["img1", "img2", "img3", "img4"]

with Pool(4) as pool:
    resultados = pool.map(procesar, imagenes)
    print(resultados)

Siguiente guía

Patrones de diseño en Python →