Comunicazione tra thread
Le code di messaggi sono una modalità di implementazione della concorrenza che consente ai thread di comunicare asincronamente attraverso una coda condivisa. In una coda di messaggi, i processi possono inviare messaggi alla coda e altri processi possono ricevere messaggi dalla coda. Ciò consente una comunicazione flessibile tra i processi senza la necessità di sincronizzazione esplicita.
In Python, la libreria queue
fornisce un’implementazione delle code di messaggi. Ecco un esempio di come utilizzare una coda di messaggi in Python:
import queueimport threading
# Creiamo una coda di messaggi condivisaq = queue.Queue()
def producer(): # Inviamo alcuni messaggi alla coda for i in range(5): q.put(i) print(f"Inviato {i}")
def consumer(): while True: # Riceviamo un messaggio dalla coda e lo stampiamo item = q.get() print(f"Ricevuto {item}") q.task_done()
# Creiamo due thread, uno per il produttore e uno per il consumatoret1 = threading.Thread(target=producer)t2 = threading.Thread(target=consumer)
# Avviamo i threadt1.start()t2.start()
# Attendiamo che il produttore finisca di inviare messaggit1.join()
# Interrompiamo il consumatoreq.put(None)
In questo esempio, il thread producer
invia cinque messaggi alla coda condivisa q
. Il thread consumer
riceve i messaggi dalla coda e li stampa. Quando il produttore ha finito di inviare messaggi, il thread principale attende che il produttore finisca (t1.join()
) e quindi interrompe il consumatore inviando un messaggio None
alla coda.
Le code di messaggi sono utili in situazioni in cui i processi o i thread devono comunicare asincronamente o se si prevede una concorrenza interna alla coda. Tuttavia, possono essere più complesse da implementare rispetto ad altre modalità di implementazione della concorrenza come i thread o i processi.