2009-10-20 8 views
27

moje strony konsumenta kolejki:pyton Kolejka get()/task_done() problem

m = queue.get() 
queue.task_done() 

<rest of the program> 

pytania:

  1. Does task_done() skutecznie wyskakuje m wyłączyć kolejki i uwalniają co blokuje konsumenta ma w kolejce?

  2. Potrzebuję użyć m podczas pozostałej części programu. czy jest to bezpieczne, czy też muszę je skopiować, zanim zadzwonię pod numer task_done()? lub jest m użyteczny po task_done()?

być szczęśliwy

Odpowiedz

47

Nie, queue.get() wyskakuje pozycję off kolejce. Kiedy to zrobisz, możesz robić, co chcesz, tak długo, jak producent działa tak, jak powinien i już go nie dotyka. queue.task_done() jest wywoływana tylko po to, aby powiadomić kolejkę, że coś wykonałeś (nie wie nawet o konkretnym przedmiocie, zlicza tylko niedokończone pozycje w kolejce), aby queue.join() wiedział, że praca została zakończona.

+0

Czy 'task_done()' wpływa 'qsize()'? Oznacza to, że jeśli kolejka ma limit rozmiaru, to kiedy bierze pod uwagę slot "pusty", po 'get()' lub po 'task_done()'? – Shai

+3

Slot jest zwalniany po 'get()', 'task_done()' jest tylko narzędziem nad poziomem kolejki, tak naprawdę nie działa z samą kolejką. –