Python Queue get()/task_done() проблема
Моя потребительская сторона очереди:
m = queue.get()
queue.task_done()
<rest of the program>
Вопросы:
-
task_done()
ли task_done()
выталкивает m
из очереди и освобождает все блокировки, которые имеет потребитель в очереди?
-
Мне нужно использовать m
во время остальной части программы. Безопасно, или мне нужно сделать, чтобы скопировать его, прежде чем я называю task_done()
или m
годны к употреблению task_done()
?
будь счастлив
Ответы
Ответ 1
Нет, queue.get()
выводит элемент из очереди. После этого вы сможете делать все, что хотите, пока продюсер работает так, как должен, и больше не трогает его. queue.task_done()
вызывается только для того, чтобы уведомить о том, что вы сделали что-то (он даже не знает об определенном элементе, он просто подсчитывает незавершенные элементы в очереди), так что queue.join()
знает, что работа завершена.