gpt4 book ai didi

python - 需要刷新 Python 多处理队列

转载 作者:行者123 更新时间:2023-12-05 05:26:07 26 4
gpt4 key购买 nike

下面是根据 hte 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()

最佳答案

在您提到的问题中,How to clear a multiprocessing queue in python ,有一个答案演示了如何清除 Queue。不是“接受”的答案,而是获得大多数赞成票的答案……

如果你的工作是轻量级的,这个问题是重复的,并且引用的解决方案也应该适用于你的情况......因为 queue.get() 清除了 Queue.

如果您的工作需要一段时间(正如您的工作一样,由于 sleep),那么删除 Queue 会更容易,这意味着重构您的代码一个新的空 Queue 可以替换要删除的现有 Queue。为了保持指针完整性,您可以将所有 Queue 对象保存在列表 queues 中,然后只需在适当的索引处替换 Queue

关于python - 需要刷新 Python 多处理队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28032315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com