【发布时间】:2015-04-20 21:36:52
【问题描述】:
我正在使用 python Queue 来存储要由线程处理的项目。根据我在网上阅读的内容,将“无”对象放入队列并像这样设置线程处理将使线程停止。 (确实如此)
for item in iter(queue.get, None):
#do stuff
queue.task_done()
现在我在网上找不到很多关于这种 for 循环的信息。据我所见,它刚刚结束,不会处理任何其他将 None 对象留在队列中的内容。 最后添加 queue.task_done() 不起作用。
谁能向我解释一下这种类型的 for 循环。它们是如何命名的,它们一般是如何工作的,或者因为我找不到任何关于它的好文档,所以请我指点我。
【问题讨论】:
-
此循环中的密钥是
iter()的替代签名 - 不是使用可迭代调用它,而是用作iter(callable, sentinel),它将调用callable()并产生结果,直到它等于sentinel,表示迭代结束。请参阅this answer 以获得更易于理解的示例。 -
注意,需要在for循环后添加
queue.task_done()调用,标记哨兵任务完成,否则queue.join()会挂掉。
标签: python multithreading