我正在研究这个例子
http://eli.thegreenplace.net/2011/12/27/python-threads-communication-and-stopping/
他像这样使用
while not self.stoprequest.isSet():
try:
dirname = self.dir_q.get(True, 0.05)
... # do work
except Queue.Empty:
continue
我不明白为什么他在block
dir_q.get(True)
元素
我想知道如果我使用
程序的行为 self.dir_q.get()
文档说如果我们不提供任何内容,那么如果队列中存在任何东西,那么它将获得它会引发异常。
我认为那个问题是什么
block
和timeout
正在做什么
答案 0 :(得分:1)
阅读队列上的文档。
Queue.get([block [,timeout]]) 从队列中删除并返回一个项目。如果可选的args块为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常。否则(块为假),如果一个项立即可用,则返回一个项,否则引发Empty异常(在这种情况下忽略超时)。
当'block'参数(不是'element')为True,'timeout'为正数时,Queue将等待'timeout'秒,直到Queue中有一个元素可用。如果Queue.get()被调用时Queue为空,并且没有其他线程Queue.put()在指定的'timeout'(例如.05秒)内成为Queue上的元素,则Queue引发Empty。否则它返回另一个线程的第一个元素Queue.put()。
答案 1 :(得分:1)
self.dir_q.get()
阻止,直到某个项目可用;因此,如果删除超时,您的程序可能无法及时对self.stoprequest.set()
作出反应。