等待一个过程成语



有没有更好的方法来写以下成语:

while q.empty():      # wait until data arrives.
    time.sleep(5)  
while not q.empty():  # start consuming data until there is nothing left.
    data = q.get()    # this removes an item from the queue (works like `.pop()`)
    # do stuff with data

qmultiprocessing.Queue()的一个实例,以防相关,尽管我认为上述结构也可以在其他地方找到。

我觉得必须有更好的方法来做到这一点。

默认情况下,

如果您使用.get(..),您将有一个阻塞队列。事实上,如果我们看一下文档:

get([block[, timeout]])
从队列中删除并返回项目。如果可选参数block True(默认值(Timeout None(默认值(,则在必要时阻止,直到项目可用。如果超时为正数,则最多阻止超时秒数,并在该时间内没有可用项时引发 Queue.Empty 异常。否则(block False(,如果立即可用,则返回一个项目,否则引发队列。空异常(在这种情况下将忽略超时(。

因此,您可以安全地使用:

while True:
    data = q.get()
    # ... process data

所以不需要做">轮询"。一个简单的.get(..)通常会休眠,直到系统通知数据可用(尽管这可能取决于操作系统等方式。

相关内容

  • 没有找到相关文章

最新更新