Concorrenza in Python
La concorrenza è spesso fraintesa come parallelismo. La concorrenza implica la pianificazione di codice indipendente da eseguire in modo sistematico. Questo capitolo si concentra sull'esecuzione della concorrenza per un sistema operativo che utilizza Python.
Il seguente programma aiuta nell'esecuzione della concorrenza per 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)
Produzione
Il programma di cui sopra genera il seguente output:
Spiegazione
"Multiprocessing" è un pacchetto simile al modulo threading. Questo pacchetto supporta la concorrenza locale e remota. Grazie a questo modulo, i programmatori ottengono il vantaggio di utilizzare più processi su un determinato sistema.