Volevo implementare un semplice programma python utilizzando l'esecuzione parallela. È legato all'I/O, quindi ho pensato che i thread sarebbero appropriati (al contrario dei processi). Dopo aver letto la documentazione di Queue e fork, ho pensato che qualcosa del genere potesse funzionare.Informazioni su os.fork e Queue.Queue
q = Queue.Queue()
if os.fork(): # child
while True:
print q.get()
else: # parent
[q.put(x) for x in range(10)]
Tuttavia, la chiamata get() non restituisce mai. Ho pensato che sarebbe tornato una volta che l'altro thread eseguiva una chiamata put(). Utilizzando il modulo threading, le cose si comportano più come mi aspettavo:
q = Queue.Queue()
def consume(q):
while True:
print q.get()
worker = threading.Thread (target=consume, args=(q,))
worker.start()
[q.put(x) for x in range(10)]
io proprio non capisco il motivo per cui l'approccio forcella non fare la stessa cosa. Cosa mi manca?
+1 per aver menzionato "multiprocessing". –