我只想知道如何在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
答案 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
我现在只是在自学,所以如果我错了,请随时指出