用 multiprocessing.Manager.list()创建多维列表并用multiprocessing.apply_async修改里面的元素
时间: 2023-11-28 07:51:34 浏览: 97
Python multiprocessing.Manager介绍和实例(进程间共享数据)
可以使用`multiprocessing.Manager.list()`创建多维列表,然后使用`multiprocessing.Pool`和`multiprocessing.Manager`结合起来使用。
以下是一个示例代码,可以创建一个2x3的多维列表,然后使用`apply_async()`函数修改其中的元素:
```python
import multiprocessing
def modify_list(l, i, j, value):
l[i][j] = value
if __name__ == '__main__':
manager = multiprocessing.Manager()
my_list = manager.list([[0, 0, 0], [0, 0, 0]])
with multiprocessing.Pool() as pool:
for i in range(len(my_list)):
for j in range(len(my_list[i])):
pool.apply_async(modify_list, (my_list, i, j, i+j))
pool.close()
pool.join()
print(my_list)
```
在这个示例中,我们首先创建了一个2x3的多维列表`my_list`,然后使用`multiprocessing.Pool`创建了一个进程池。我们遍历了列表中的所有元素,然后使用`apply_async()`函数异步地调用`modify_list()`函数,将`my_list`、行索引、列索引和一个值作为参数传递。
`modify_list()`函数接收这些参数,并将值赋给多维列表的相应元素。注意,由于`my_list`是一个共享对象,所以我们可以在不同的进程中修改它。
最后,我们等待所有进程完成后,打印修改后的多维列表。输出应为:
```
[[0, 1, 2], [1, 2, 3]]
```
阅读全文