28

我只想知道如何像普通的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() 

“队列”对象没有属性“清除”

normal_q.queue.clear() # This is ok
4

4 回答 4

68

所以,我看一下 Queue 类,你可以试试这个代码:

while not some_queue.empty():
    some_queue.get()  # as docs say: Remove and return an item from the queue.
于 2013-05-09T13:16:34.827 回答
16

请求宽恕而不是许可;只需尝试清空队列,直到出现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()在您需要时调用。

于 2016-03-15T17:54:21.903 回答
2

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

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

于 2013-05-09T12:17:34.980 回答
-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

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

于 2021-04-28T01:21:09.250 回答