8 - 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.

8 - ¿Cómo sincronizar procesos? - Ejecutar Python File#

  • La sincronización de procesos se puede lograr utilizando:

    • la clase Barrier de la librería multiprocessing.

    • la clase Lock de la librería multiprocessing.

import multiprocessing
from multiprocessing import Barrier, Lock, Process
from time import time
from datetime import datetime

def test_with_barrier(synchronizer, serializer):
    name = multiprocessing.current_process().name
    synchronizer.wait()
    now = time()
    
    with serializer:
        print("Proceso %s ----> %s \n" %(name,datetime.fromtimestamp(now)))

    #serializer.acquire()
    #print("Proceso %s ----> %s" %(name,datetime.fromtimestamp(now)))
    #serializer.release()

def test_without_barrier():
    name = multiprocessing.current_process().name
    now = time()
    print("Proceso %s ----> %s \n" %(name ,datetime.fromtimestamp(now)))

if __name__ == '__main__':
    synchronizer = Barrier(2)
    serializer = Lock()
    Process(name='p1 - prueba_con_barrera',target=test_with_barrier,args=(synchronizer,serializer)).start()
    Process(name='p2 - prueba_con_barrera',target=test_with_barrier,args=(synchronizer,serializer)).start()
    Process(name='p3 - prueba_sin_barrera',target=test_without_barrier).start()
    Process(name='p4 - prueba_sin_barrera',target=test_without_barrier).start()
    
Proceso p1 - prueba_con_barrera ----> 2023-05-07 16:41:32.844288 

Proceso p2 - prueba_con_barrera ----> 2023-05-07 16:41:32.846685 
Proceso p3 - prueba_sin_barrera ----> 2023-05-07 16:41:32.854381 
Proceso p4 - prueba_sin_barrera ----> 2023-05-07 16:41:32.872981