Python Queue get()/task_done() 问题
这是我在队列消费端的代码:
m = queue.get()
queue.task_done()
<rest of the program>
问题:
task_done()
这个函数是不是会把m
从队列中移除,并释放消费者对队列的锁?我在程序的其他地方还需要用到
m
。这样做安全吗?还是说在调用task_done()
之前我需要先复制一份m
,或者在调用task_done()
之后m
还能用吗?
保持快乐
1 个回答
59
不,queue.get()
是从队列中取出一个项目。取出之后,你可以随意处理这个项目,只要生产者正常工作,不再去碰它就可以了。queue.task_done()
这个方法是用来告诉队列你已经完成了某件事情(它并不知道具体是哪个项目,只是统计队列中未完成的项目数量),这样 queue.join()
才能知道工作已经完成。