2009-10-20 63 views
27

我的隊列消費端:蟒蛇隊列得到()/ task_done()問題

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

<rest of the program> 

問題:

  1. 是否task_done()有效地彈出m從隊列並釋放任何鎖定消費者在排隊?

  2. 我需要在程序的其餘部分使用m。是否安全,還是在我致電task_done()之前需要複製它?或者,task_done()之後可以使用m

快樂

回答

47

沒有,queue.get()彈出項目從隊列中。在你做完這些之後,只要製片人按照自己的意願工作,不再觸摸它,你就可以隨心所欲地做任何事情。 queue.task_done()只是打電話通知你的東西做隊列(它甚至不知道具體的項目,它只是對在該隊列中未完成的項目),從而使queue.join()知道工作已經完成。

+0

呢'task_done()''影響QSIZE()'?也就是說,如果隊列有大小限制,當它認爲插槽「空」,後'得到()'或'後task_done()'? – Shai 2017-07-12 11:21:19

+3

的插槽後釋放出來'得到()','task_done()'只是隊列級別以上的實用工具,它並沒有真正與隊列本身的工作。 – 2017-07-29 20:27:50