Подтвердить что ты не робот

Python Queue get()/task_done() проблема

Моя потребительская сторона очереди:

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

<rest of the program>

Вопросы:

  1. task_done() ли task_done() выталкивает m из очереди и освобождает все блокировки, которые имеет потребитель в очереди?

  2. Мне нужно использовать m во время остальной части программы. Безопасно, или мне нужно сделать, чтобы скопировать его, прежде чем я называю task_done() или m годны к употреблению task_done()?

будь счастлив

4b9b3361

Ответ 1

Нет, queue.get() выводит элемент из очереди. После этого вы сможете делать все, что хотите, пока продюсер работает так, как должен, и больше не трогает его. queue.task_done() вызывается только для того, чтобы уведомить о том, что вы сделали что-то (он даже не знает об определенном элементе, он просто подсчитывает незавершенные элементы в очереди), так что queue.join() знает, что работа завершена.