Concurrencia en Python

La concurrencia a menudo se malinterpreta como paralelismo. La concurrencia implica programar código independiente para que se ejecute de manera sistemática. Este capítulo se centra en la ejecución de la simultaneidad para un sistema operativo que utiliza Python.

El siguiente programa ayuda en la ejecución de la simultaneidad para un sistema operativo:

import os
import time
import threading
import multiprocessing

NUM_WORKERS = 4

def only_sleep():
   print("PID: %s, Process Name: %s, Thread Name: %s" % (
      os.getpid(),
      multiprocessing.current_process().name,
      threading.current_thread().name)
   )
   time.sleep(1)

def crunch_numbers():
   print("PID: %s, Process Name: %s, Thread Name: %s" % (
      os.getpid(),
      multiprocessing.current_process().name,
      threading.current_thread().name)
   )
   x = 0
   while x < 10000000:
      x += 1
for _ in range(NUM_WORKERS):
   only_sleep()
end_time = time.time()
print("Serial time=", end_time - start_time)

# Run tasks using threads
start_time = time.time()
threads = [threading.Thread(target=only_sleep) for _ in range(NUM_WORKERS)]
[thread.start() for thread in threads]
[thread.join() for thread in threads]
end_time = time.time()

print("Threads time=", end_time - start_time)

# Run tasks using processes
start_time = time.time()
processes = [multiprocessing.Process(target=only_sleep()) for _ in range(NUM_WORKERS)]
[process.start() for process in processes]
[process.join() for process in processes]
end_time = time.time()

print("Parallel time=", end_time - start_time)

Salida

El programa anterior genera la siguiente salida:

Explicación

"Multiprocesamiento" es un paquete similar al módulo de subprocesamiento. Este paquete admite simultaneidad local y remota. Debido a este módulo, los programadores obtienen la ventaja de utilizar múltiples procesos en el sistema dado.