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