Как очистить многопроцессорную очередь в python

Я просто хочу знать, как очистить многопроцессорную очередь в 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

3 ответов


нет прямого способа очистки a multiprocessing.Queue.

Я считаю, что ближайший у вас есть close(), но это просто говорит о том, что никакие данные не будут помещены в эту очередь и закроют ее, когда все данные будут сброшены в канал.


Так, я смотрю на класс очереди, и вы можете попробовать этот код:

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

встроенный-в классе отсутствует метод, который вы хотите? Подкласс встроенный класс, и добавить метод, который вы думаете, должен быть там!

from Queue import Queue, Empty

class ClearableQueue(Queue):

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

код ClearableQueue класс наследует всю доброту (и поведение) встроенного Queue class, и имеет метод, который вы теперь хотите.

просто использовать q = ClearableQueue() во всех местах, где вы использовали q = Queue(), а вызов q.clear() когда захочешь.