manager.Queue()和pool.apply_async()配合使用的示例
时间: 2023-12-03 13:46:17 浏览: 163
下面是一个使用`manager.Queue()`和`pool.apply_async()`配合使用的示例:
```python
import multiprocessing as mp
def worker(queue):
while True:
item = queue.get()
if item is None:
break
# 处理任务
if __name__ == '__main__':
num_processes = 4
task_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
manager = mp.Manager()
queue = manager.Queue()
for task in task_list:
queue.put(task)
pool = mp.Pool(num_processes, worker, (queue, ))
for i in range(num_processes):
queue.put(None)
pool.close()
pool.join()
```
在这个示例中,我们首先创建了一个`manager.Queue()`实例,并将任务列表中的任务添加到队列中。然后,我们创建了一个`mp.Pool`实例,指定了进程数量和一个`worker`函数,该函数将不断地从队列中获取任务并处理它们。
为了使用`queue.get()`等待并获取任务,`worker`函数需要一个`queue`参数。这个参数是在`mp.Pool`的构造函数中传递的,因此我们使用了`(queue, )`的语法,以便将`queue`作为单个元组元素传递给`worker`函数。
一旦所有任务都被添加到队列中,我们就可以开始启动进程池中的工作进程了。为了告诉每个工作进程何时停止,我们向队列中添加了`None`元素。这个元素告诉工作进程它们可以退出了。
最后,我们使用`pool.close()`和`pool.join()`方法等待所有进程完成任务并退出。
阅读全文