Python Queue get()/task_done() 问题

35 投票
1 回答
25901 浏览
提问于 2025-04-15 15:12

这是我在队列消费端的代码:

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

<rest of the program>

问题:

  1. task_done()这个函数是不是会把m从队列中移除,并释放消费者对队列的锁?

  2. 我在程序的其他地方还需要用到m。这样做安全吗?还是说在调用task_done()之前我需要先复制一份m,或者在调用task_done()之后m还能用吗?

保持快乐

1 个回答

59

不,queue.get() 是从队列中取出一个项目。取出之后,你可以随意处理这个项目,只要生产者正常工作,不再去碰它就可以了。queue.task_done() 这个方法是用来告诉队列你已经完成了某件事情(它并不知道具体是哪个项目,只是统计队列中未完成的项目数量),这样 queue.join() 才能知道工作已经完成。

撰写回答