以下是从Python文档部分16.6中的示例略微简化的代码,其中显示了如何从MP队列中放置和获取对象。
如果我的程序放入 - 例如 - mp队列中的大量对象,并且在Y从结果队列中取出后,应用程序逻辑决定它确实不需要处理其余的对象。
那么,如何删除/清除/清除/清除队列的内容?这里似乎也提出了同样的问题,答案是“但我无法相信没有办法做到这一点。
How to clear a multiprocessing queue in python
由于
import time, import random
from multiprocessing import Process, Queue, current_process
def worker(input, output):
for func, args in iter(input.get, 'STOP'):
result = calculate(func, args)
output.put(result)
def calculate(func, args):
result = func(*args)
return current_process().name, func.__name__, args, result
def plus(a, b):
time.sleep(5*random.random())
return a, b, a + b
def test():
NUMBER_OF_PROCESSES = 4
TASKS2 = [(plus, (i, 8)) for i in range(10000)]
# Create queues
task_queue = Queue()
done_queue = Queue()
# Add more tasks using `put()`
for task in TASKS2:
task_queue.put(task)
print task_queue.qsize()
# Start worker processes
for i in range(NUMBER_OF_PROCESSES):
Process(target=worker, args=(task_queue, done_queue)).start()
# Get and print results
print 'Unordered results:'
for i in range(len(TASKS1)+len(TASKS2)):
s = done_queue.get()
print s[0], s[3][2]
# Tell child processes to stop
for i in range(NUMBER_OF_PROCESSES):
task_queue.put('STOP')
if __name__ == '__main__':
test()
答案 0 :(得分:0)
在您引用的问题How to clear a multiprocessing queue in python中,有一个答案可演示如何清除Queue
。不是"接受"回答,但是大多数上票的人......
如果您的工作量很轻,这个问题就是重复的,引用的解决方案也适用于您的情况......因为queue.get()
会清除Queue
。
如果您的工作需要一段时间(由于sleep
),您可以更轻松地删除Queue
,这意味着您需要重新构建代码空Queue
可以替换要删除的现有Queue
。为了保持指针的完整性,您可以将所有Queue
个对象保留在列表queues
中,然后只需用适当的索引替换Queue
。