【问题标题】:Python Queue get()/task_done() issuePython 队列 get()/task_done() 问题
【发布时间】:2010-12-08 06:37:13
【问题描述】:

队列中我的消费者端:

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

<rest of the program>

问题:

  1. task_done() 是否有效地将m 从队列中弹出并释放消费者在队列中的所有锁?

  2. 我需要在程序的其余部分使用m。它安全吗,还是我需要在调用task_done() 之前复制它,或者mtask_done() 之后可用?

开心

【问题讨论】:

    标签: python multithreading queue


    【解决方案1】:

    不,queue.get() 将项目从队列中弹出。在你这样做之后,你可以对它做任何你想做的事情,只要制作人按照它应该的方式工作并且不再触摸它。调用queue.task_done() 只是为了通知队列你已经完成了某事(它甚至不知道具体的项目,它只计算队列中未完成的项目),以便queue.join() 知道工作已经完成。

    【讨论】:

    • task_done() 会影响qsize() 吗?也就是说,如果 Queue 有大小限制,那么在 get() 之后或 task_done() 之后,它什么时候认为 slot“空”?
    • 插槽在get()之后被释放,task_done()只是队列级别之上的一个实用程序,它并不能真正与队列本身一起工作。
    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多