Skip to content

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 queue
import threading
# Creiamo una coda di messaggi condivisa
q = 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 consumatore
t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)
# Avviamo i thread
t1.start()
t2.start()
# Attendiamo che il produttore finisca di inviare messaggi
t1.join()
# Interrompiamo il consumatore
q.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.