2009-10-20 14 views
27

sıranın benim tüketici tarafı:piton Kuyruk/task_done() sorunu) (olsun

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

<rest of the program> 

sorular:

  1. task_done() etkin sıranın kapalı m çıkar mı ve tüketiciyi kilitler ne olursa olsun bırakın kuyrukta var mı?

  2. Programın geri kalanı boyunca m kullanmam gerekiyor. güvenli mi yoksa task_done()'u aramadan önce kopyalamam gerekir mi? veya task_done()'dan sonra kullanılabilir m mu?

cevap

47

Hayır, queue.get() kuyruğuna kapalı öğeyi çıkar mutlu. Bunu yaptıktan sonra, yapımcı istediği gibi çalıştığı ve artık ona dokunmadığı sürece, onunla ne istersen yapabilirsiniz. queue.task_done() yalnızca bir şeyle yaptığınız kuyruğu bildirmek için çağrılır (belirli öğeyle ilgili bilgisi bile olmaz, yalnızca kuyruktaki bitmemiş öğeleri sayar), böylece queue.join() işin bittiğini bilir.

+0

does 'task_done()' 'qsize()' yi etkiler mi? Yani, Kuyrukta bir boyut sınırı varsa, "boş", "get()" ifadesinden sonra veya "task_done()" ifadesinden sonra ne zaman kullanılır? – Shai

+3

'get() ',' task_done() ', sıra sırasının üzerindeki bir yardımcı programdan sonra yuva serbest bırakılır, gerçekten kuyruğun kendisiyle çalışmaz. –