用 multiprocessing.Manager.list()创建多维列表并用multiprocessing.apply_async修改里面的元素
时间: 2023-11-28 07:51:34 浏览: 225
可以使用 `multiprocessing.Manager().list()` 创建多维列表,然后将其作为参数传递给 `multiprocessing.Pool()` 中的 `apply_async()` 方法进行修改。
下面是一个简单的例子:
```python
import multiprocessing
def modify_list(lst, i, j, val):
lst[i][j] = val
if __name__ == '__main__':
manager = multiprocessing.Manager()
my_list = manager.list([[0, 0], [0, 0]])
print("Before:", my_list)
with multiprocessing.Pool() as pool:
pool.apply_async(modify_list, (my_list, 1, 1, 1))
pool.apply_async(modify_list, (my_list, 0, 1, 2))
pool.close()
pool.join()
print("After:", my_list)
```
输出:
```
Before: [[0, 0], [0, 0]]
After: [[0, 2], [0, 1]]
```
在这个例子中,`modify_list()` 接收一个多维列表 `lst`,以及三个索引值 `i`、`j` 和 `val`,并将 `lst[i][j]` 设置为 `val`。在主进程中,我们使用 `Manager().list()` 创建了一个多维列表 `my_list`,并将其作为参数传递给 `apply_async()` 方法。`apply_async()` 方法会异步地执行两个 `modify_list()` 函数调用,并在完成后将修改后的 `my_list` 返回给主进程。最后,我们输出了修改后的 `my_list`。
阅读全文