如何在python中清除多处理队列

时间:2013-05-09 12:09:08

标签: python multiprocessing

我只想知道如何在python中清除多处理队列,就像普通的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() 

'Queue'对象没有属性'clear'

normal_q.queue.clear() # This is ok

4 个答案:

答案 0 :(得分:48)

所以,我看看Queue类,你可以试试这段代码:

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

答案 1 :(得分:2)

没有直接的方式来清除multiprocessing.Queue

我相信你最接近的是close(),但这只是说没有更多的数据会被推送到那个队列,并且在所有数据都被刷新到管道时会关闭它。

答案 2 :(得分:2)

请求宽恕而不是许可;只是尝试清空队列,直到得到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()

答案 3 :(得分:1)

我是新手所以不要生我的气,但是

为什么不重新定义 .Queue() 变量?

import multiprocessing as mp

q = mp.Queue()
chunk = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in chunk:
    q.put(i)
print(q.empty())

q = mp.Queue()
print(q.empty())

我的输出:

>>False
>>True

我现在只是在自学,所以如果我错了,请随时指出