将超时参数添加到python的Queue.join()

ola*_*ndo 16 python queue timeout join

我希望能够加入()队列类,但是如果调用尚未返回,则会在一段时间后超时.最好的方法是什么?是否可以通过使用元类继承queue \来实现?

Luk*_*ský 20

子类化Queue可能是最好的方法.这样的东西应该工作(未经测试):

def join_with_timeout(self, timeout):
    self.all_tasks_done.acquire()
    try:
        endtime = time() + timeout
        while self.unfinished_tasks:
            remaining = endtime - time()
            if remaining <= 0.0:
                raise NotFinished
            self.all_tasks_done.wait(remaining)
    finally:
        self.all_tasks_done.release()
Run Code Online (Sandbox Code Playgroud)

  • 您可以阅读Queue的源代码.它有一个为`put`和`get`实现的`timeout`参数,它很容易扩展`join`以使用类似的方法. (3认同)

Ray*_*ger 15

加入()方法是所有关于等待做所有的任务.如果您不关心任务是否实际完成,您可以定期轮询未完成的任务计数:

stop = time() + timeout
while q.unfinished_tasks and time() < stop:
    sleep(1)
Run Code Online (Sandbox Code Playgroud)

当任务完成或超时时间已过时,此循环将存在.

雷蒙德