【发布时间】:2021-03-10 10:50:44
【问题描述】:
我有一个全局 NumPy 数组 ys_final 并定义了一个生成数组 ys 的函数。 ys 数组将根据输入参数生成,我想将这些 ys 数组添加到全局数组中,即ys_final = ys_final + ys。
添加的顺序无关紧要,所以我想使用多处理库中的 Pool.apply_async() 但我无法写入全局数组。参考代码为:
import multiprocessing as mp
ys_final = np.zeros(len)
def ys_genrator(i):
#code to generate ys array
return ys
pool = mp.Pool(mp.cpu_count())
for i in range(3954):
ys_final = ys_final + pool.apply_async(ys_genrator, args=(i)).get()
pool.close()
pool.join()
上面的代码块一直在运行,没有任何反应。我也试过 *mp.Process ,但我仍然面临同样的问题。在那里我定义了一个直接添加到全局数组的目标函数,但它也无法正常工作,因为该块会一直运行。参考:
def func(i):
#code to generate ys
global ys_final
ys_final = ys_final + ys
for i in range(3954):
p = mp.Process(target=func, args=(i,))
p.start()
p.join()
任何建议都会很有帮助。
编辑:
我的 ys_genrator 是一个线性插值函数。基于参数 i 是二维图像中行的索引,该函数创建一个插值幅度数组,该数组将与图像中的所有插值幅度叠加,因此ys 需要被添加到ys_final
变量len是插值数组的长度,所有行都一样。
供参考,ys_genrator(i) 的简单版本如下:
def ys_genrator(i):
ys = np.ones(10)*i
return ys
【问题讨论】:
标签: python arrays multithreading python-multiprocessing