Sono nuovo di python (io vengo da PHP), ho letto i tutorial e provare cose per un paio di giorni, ma non riesco a capire questo esempio di coda (http://docs.python.org/2/library/queue.html)discussioni Python e la fila esempio
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
La cosa che non capisco è come il thread di lavoro completa ed esiste. Ho letto i blocchi q.get() fino a quando un elemento non è disponibile, quindi se tutti gli elementi sono elaborati e nessuno è lasciato in coda perché q.get() non blocca per sempre?
Questa soluzione è piuttosto rischiosa. Se i thread worker sono veloci, testeranno 'q.empty()' prima che tutti gli elementi siano stati aggiunti alla coda, e quindi escono prima che abbiano fatto qualcosa. Allo stesso modo, se c'è un singolo elemento lasciato in coda e due thread testano 'q.empty()' contemporaneamente, entrambi continueranno ma uno otterrà un elemento fuori dalla coda mentre l'altro bloccherà a 'q.get() '. –