大量manager.Queue()统一结束的示例
时间: 2024-02-01 14:15:55 浏览: 68
下面是一个简单的示例,演示如何使用`manager.Queue()`来创建多个进程间通信的队列,并在所有进程完成任务后统一结束它们。
```python
from multiprocessing import Process, Manager
def worker_func(task_queue, result_queue):
while True:
try:
task = task_queue.get()
# 处理任务
result = task + 1
# 将结果放入结果队列
result_queue.put(result)
except KeyboardInterrupt:
break
def main():
num_processes = 4
tasks = [1, 2, 3, 4, 5, 6, 7, 8]
with Manager() as manager:
# 创建任务队列和结果队列
task_queue = manager.Queue()
result_queue = manager.Queue()
# 将任务放入任务队列
for task in tasks:
task_queue.put(task)
# 创建进程
processes = []
for i in range(num_processes):
p = Process(target=worker_func, args=(task_queue, result_queue))
p.start()
processes.append(p)
# 等待所有进程完成任务
for p in processes:
p.join()
# 从结果队列中获取结果并打印
while not result_queue.empty():
result = result_queue.get()
print(result)
```
在这个示例中,我们首先创建了一个包含8个任务的列表。然后,我们使用`Manager()`创建了一个共享内存的任务队列和结果队列。接下来,我们创建了4个进程,每个进程都从任务队列中获取任务并处理它,并将结果放入结果队列中。我们使用`join()`方法等待所有进程完成任务。最后,我们从结果队列中获取结果并打印它们。
当我们运行这个示例时,我们会看到所有进程都完成了它们的任务,并且它们已经统一结束了。
请注意,如果您希望在任何时候结束所有进程,可以使用`KeyboardInterrupt`异常来停止进程。在上述示例中,我们在`worker_func()`函数中捕获了`KeyboardInterrupt`异常并退出了进程。
阅读全文