6 - Multiprocessing.ipynb#
Librería Multiprocessing de Python#
La librería Multiprocessing de Python es una biblioteca estándar que permite la creación de procesos en paralelo en una computadora con múltiples núcleos o CPUs. Proporciona una interfaz de programación para crear y administrar procesos de manera fácil y eficiente, lo que permite acelerar la ejecución de programas que realizan tareas intensivas en cómputo.
6 - ¿Cómo intercambiar objetos entre procesos utilizando una cola?#
La librería multiprocessing de Python permite intercambiar objetos entre procesos utilizando una cola.
Para ello, se utiliza la clase Queue() de la librería multiprocessing.
La clase Queue() recibe como argumento el tamaño máximo de la cola.
La clase Queue() tiene los métodos put() y get() para añadir y obtener objetos de la cola.
En el ejemplo, se crea una clase producer que hereda de la clase Process de la librería multiprocessing.
La clase producer sobreescribe el método run() de la clase Process.
La clase producer añade objetos a la cola utilizando el método put() de la clase Queue.
La clase producer imprime el tamaño de la cola utilizando el método qsize() de la clase Queue.
Se crea una clase consumer que hereda de la clase Process de la librería multiprocessing.
La clase consumer sobreescribe el método run() de la clase Process.
La clase consumer obtiene objetos de la cola utilizando el método get() de la clase Queue.
La clase consumer imprime los objetos obtenidos de la cola.
La clase consumer imprime un mensaje si la cola está vacía.
import multiprocessing
import random
import time
class producer(multiprocessing.Process):
def __init__(self, queue):
multiprocessing.Process.__init__(self)
self.queue = queue
def run(self) :
for i in range(5):
item = random.randint(0, 256)
self.queue.put(item)
print ("Proceso Producer: item %d agregado a la cola %s" % (item,self.name))
time.sleep(0.5)
print ("El tamaño de la cola es %s" % self.queue.qsize())
class consumer(multiprocessing.Process):
def __init__(self, queue):
multiprocessing.Process.__init__(self)
self.queue = queue
def run(self):
while True:
if (self.queue.empty()):
print("La cola está vacía")
break
else :
time.sleep(1)
item = self.queue.get()
print ('Proceso Consumer: item %d sacado de %s \n' % (item, self.name))
time.sleep(0.5)
if __name__ == '__main__':
queue = multiprocessing.Queue()
process_producer = producer(queue)
process_consumer = consumer(queue)
process_producer.start()
process_consumer.start()
process_producer.join()
process_consumer.join()
Proceso Producer: item 56 agregado a la cola producer-60
El tamaño de la cola es 1
Proceso Producer: item 23 agregado a la cola producer-60
Proceso Consumer: item 56 sacado de consumer-61
El tamaño de la cola es 1
Proceso Producer: item 162 agregado a la cola producer-60
El tamaño de la cola es 2
Proceso Producer: item 87 agregado a la cola producer-60
El tamaño de la cola es 3
Proceso Producer: item 140 agregado a la cola producer-60
Proceso Consumer: item 23 sacado de consumer-61
El tamaño de la cola es 3
Proceso Consumer: item 162 sacado de consumer-61
Proceso Consumer: item 87 sacado de consumer-61
Proceso Consumer: item 140 sacado de consumer-61
La cola está vacía