如何清除Python中的多队列(How to clear a multiprocessing que

2019-09-02 09:28发布

我只是想知道如何清除多队列蟒蛇像一个正常的Python队列。 例如:

from multiprocessing import Queue  # multiprocessing queue
from Queue import Queue            # normal queue

multi_q = Queue()
normal_q = Queue()
multi_q.clear()                    # or multi_q.queue.clear() 

“队列”对象没有属性“清晰的”

normal_q.queue.clear() # This is ok

Answer 1:

有清除的没有直接的方法multiprocessing.Queue

我相信你有最近的是close() ,但只是说,没有更多的数据将被推到队列中,将关闭它,当所有数据已刷新到管道。



Answer 2:

所以,我拿一下Queue类,你可以试试下面的代码:

while not some_queue.empty():
    some_queue.get()  # as docs say: Remove and return an item from the queue.


Answer 3:

请求原谅,而不是许可; 只是尝试清空队列,直到你得到的Empty异常,则忽略该异常:

from Queue import Empty

def clear(q):
    try:
        while True:
            q.get_nowait()
    except Empty:
        pass

更妙的是:是一个内置类缺少需要的方法? 子类中的内置类,并添加您认为应该有方法!

from Queue import Queue, Empty

class ClearableQueue(Queue):

    def clear(self):
        try:
            while True:
                self.get_nowait()
        except Empty:
            pass

ClearableQueue类继承的内置的所有善良(和行为) Queue类,并有你现在想的方法。

只需使用q = ClearableQueue()在你使用的所有地方q = Queue()并调用q.clear()当你想。



文章来源: How to clear a multiprocessing queue in python