Python Queue 模块卡住了

wil*_*ibi 3 python python-2.7

在 Python2.7 中,使用Queue模块时:

q = Queue.PriorityQueue(maxsize=3)
q.put((1,'foo'))
q.put((2,'bar'))
q.put((3,'baz'))
q.put((4,'boo'))   # on purpose
Run Code Online (Sandbox Code Playgroud)

然后脚本卡住了。我也在 Ipython 中尝试过,当我放置第 4 个项目时它会卡住。为什么会这样?以及如何正确使用PriorityQueue来创建给定大小的优先队列。

fal*_*tru 5

根据Queue模块文档

Queue.put(item[, block[, timeout]])

将项目放入队列。如果可选 args 块为 true 且 timeout 为 None (默认值),则在必要时阻止,直到有空闲插槽可用。 如果 timeout 是一个正数,它最多会阻塞 timeout 秒,如果在该时间内没有可用的空闲插槽,则会引发 Full 异常。否则(块为假),如果空闲插槽立即可用,则将项目放入队列,否则引发 Full 异常(在这种情况下忽略超时)。