I just want to know how to clear a multiprocessing queue in python like a normal python queue. For instance:
from multiprocessing import Queue # multiproces
So, I take look at Queue class, and you may to try this code:
while not some_queue.empty():
some_queue.get() # as docs say: Remove and return an item from the queue.
Ask for forgiveness rather than permission; just try to empty the queue until you get the Empty
exception, then ignore that exception:
from Queue import Empty
def clear(q):
try:
while True:
q.get_nowait()
except Empty:
pass
Better yet: is a built-in class missing the method you want? Subclass the built-in class, and add the method you think should be there!
from Queue import Queue, Empty
class ClearableQueue(Queue):
def clear(self):
try:
while True:
self.get_nowait()
except Empty:
pass
Your ClearableQueue
class inherits all the goodness (and behavior) of the built-in Queue
class, and has the method you now want.
Simply use q = ClearableQueue()
in all places where you used q = Queue()
, and call q.clear()
when you'd like.
There is no direct way of clearing a multiprocessing.Queue
.
I believe the closest you have is close()
, but that simply states that no more data will be pushed to that queue, and will close it when all data has been flushed to the pipe.