Uso de colas y tuberías de multiprocesamiento

Comunicación entre procesos en Python

Aprenda a coordinar varios procesos de forma eficaz utilizando multiprocesamiento de Python Colas, tuberías y objetos de memoria compartida. Esta guía proporciona ejemplos prácticos y mejores prácticas para la comunicación entre procesos.

Programación
Autor/a
Afiliación
Fecha de publicación

5 de febrero de 2024

Fecha de modificación

9 de mayo de 2025

Palabras clave

Colas de multiprocesamiento, Tuberías de multiprocesamiento, Comunicación entre procesos en Python, Memoria compartida en Python, Multiprocesamiento IPC

Introducción

Cuando se trabaja con el módulo multiprocesamiento de Python, coordinar la comunicación entre procesos es fundamental para crear aplicaciones paralelas eficientes. En este tutorial, exploraremos la comunicación entre procesos (IPC) mediante colas y tuberías, y abordaremos los objetos de memoria compartida como enfoque complementario. Aprenderá a utilizar estas herramientas para intercambiar datos entre procesos de forma eficaz y evitar errores comunes.



Colas de multiprocesamiento

Las colas son una forma segura para los subprocesos y los procesos de intercambiar datos entre procesos. Te permiten poner datos en cola en un proceso y sacarlos de la cola en otro.

Ejemplo: uso de una cola

import multiprocessing

def worker(q):
    # Poner un mensaje en la cola
    q.put("Hello from worker!")

if __name__ == "__main__":
    q = multiprocessing.Queue()
    p = multiprocessing.Process(target=worker, args=(q,))
    p.start()
    # Recupera el mensaje de la cola
    message = q.get()
    print("Message from worker:", message)
    p.join()
Nota

Las colas gestionan la sincronización internamente, lo que las convierte en una opción conveniente para la comunicación entre procesos sin necesidad de mecanismos de bloqueo adicionales.

Tuberías de multiprocesamiento

Las tuberías proporcionan un canal de comunicación bidireccional entre dos procesos. Son más sencillas que las colas, pero se suelen utilizar para la comunicación punto a punto.

Ejemplo: uso de una tubería

import multiprocessing

def worker(conn):
    # Enviar un mensaje a través de la tubería
    conn.send("Hello from worker!")
    conn.close()

if __name__ == "__main__":
    parent_conn, child_conn = multiprocessing.Pipe()
    p = multiprocessing.Process(target=worker, args=(child_conn,))
    p.start()
    # Recibe el mensaje de la tubería
    message = parent_conn.recv()
    print("Message from worker:", message)
    p.join()
Tip

Las tuberías son ideales para la comunicación simple y directa entre dos procesos, pero para escenarios más complejos con múltiples productores y consumidores, a menudo son preferibles las colas.

Objetos de memoria compartida

Además de las colas y los pipes, Python proporciona objetos de memoria compartida (como multiprocessing.Value y multiprocessing.Array) para compartir datos entre procesos sin necesidad de serialización. Esto puede reducir la sobrecarga de comunicación.

Ejemplo: uso de un valor compartido

import multiprocessing

def increment(shared_val):
    # Usa un bloqueo para evitar condiciones de carrera
    with shared_val.get_lock():
        shared_val.value += 1

if __name__ == "__main__":
    shared_val = multiprocessing.Value('i', 0)
    processes = []
    for _ in range(5):
        p = multiprocessing.Process(target=increment, args=(shared_val,))
        processes.append(p)
        p.start()
    for p in processes:
        p.join()
    print("Final value:", shared_val.value)
Advertencia

Cuando utilice objetos de memoria compartida, utilice siempre bloqueos u otros mecanismos de sincronización para evitar condiciones de carrera.

Conclusión

La comunicación entre procesos es un aspecto clave para crear aplicaciones multiprocesamiento robustas. Las colas y los pipes proporcionan formas sencillas de intercambiar datos entre procesos, mientras que los objetos de memoria compartida ofrecen una solución eficiente para compartir grandes estructuras de datos sin una sobrecarga excesiva. Al comprender y aplicar estas herramientas, puede diseñar aplicaciones Python que sean eficientes y escalables.

Lecturas adicionales

Feliz programación, y que tus procesos se comuniquen de manera eficiente!

Explorar más artículos

Nota

Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.

placeholder

placeholder
No hay resultados
Volver arriba

Reutilización

Cómo citar

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Uso de colas y tuberías de multiprocesamiento},
  date = {2024-02-05},
  url = {https://www.datanovia.com/es/learn/programming/python/advanced/parallel-processing/multiprocessing-queues-and-pipes.qmd},
  langid = {es}
}
Por favor, cita este trabajo como:
Kassambara, Alboukadel. 2024. “Uso de colas y tuberías de multiprocesamiento.” February 5, 2024. https://www.datanovia.com/es/learn/programming/python/advanced/parallel-processing/multiprocessing-queues-and-pipes.qmd.