【发布时间】:2021-11-15 20:21:53
【问题描述】:
我刚刚开始使用 python 多处理。 我的代码面临的问题可以总结如下。
基本上,我试图让一个二维数组被几个不同的进程访问和修改。
我在一年前的 StackOverflow 上发现了 Alam (How to create a shared 2D array in python multiprocessing) 提出的类似问题,但没有明确给出该问题的答案。
这是一个代码 sn-p,类似于 Alam 提供的代码,以帮助讨论。
import multiprocessing as mp
import numpy as np
import ctypes as c
n = 2
m = 3
def addData(array, process_number):
n,m = np.shape(array)
i=0
for nn in range(n):
for mm in range(m):
array[nn][mm] += i
i=i+1
print("Array after process " + str(process_number))
print(array)
if __name__=='__main__':
mp_arr=mp.Array('i', n*m)
arr = np.frombuffer(mp_arr.get_obj(),c.c_int)
u = arr.reshape((n, m))
print("Array at the inital state: ")
print(u)
p1=mp.Process(target=addData,args=(u,1))
p2=mp.Process(target=addData,args=(u,2))
p1.start()
p2.start()
p1.join()
p2.join()
print("Array at the final state: ")
print(u)
这是输出: output_result
可以看到,二维数组的最终输出还是[[0,0,0], [0,0,0]] 我希望它是 [[0,2,4], [6, 8, 10]]。
【问题讨论】:
-
它似乎对我有用 - 当我运行它时,我得到了结果
[[0,2,4], [6, 8, 10]]。请指定OS和Python的版本,可能是相关的。 -
我在 macOS Big Sur 版本 11.4 上使用 python 版本 3.9.5
标签: python arrays multidimensional-array multiprocessing