【发布时间】:2020-02-29 08:16:00
【问题描述】:
我正在尝试使用具有多处理模块的工作池从文本文件创建一系列 NumPy 数组。
def process_line(line, x,y,z,t):
sl = line.split()
x = np.append(x,float(sl[0].replace(',','')))
y = np.append(y,float(sl[1].replace(',','')))
z = np.append(z,float(sl[2].replace(',','')))
t = np.append(t,float(sl[3].replace(',','')))
def txt_to_HDF_converter(name, path_file):
#init objects
x = np.empty(0)
y = np.empty(0)
z = np.empty(0)
t = np.empty(0)
pool = mp.Pool(4)
jobs = []
with open(path_file) as f:
for line in f:
jobs.append(pool.apply_async(process_line,(line,x,y,z,t)))
#wait for all jobs to finish
for job in jobs:
job.get()
#clean up
pool.close()
当数组在process_line 函数中分配时,问题就出现了,就好像参数按值传递一样,在循环结束时,我最终得到只有一个元素的数组。
知道如何解决这个问题吗?
【问题讨论】:
-
你确定工人是线程吗?如果它们是进程,那么它们各自在自己的数据结构上工作,最后(加入时)您必须将它们的所有结果收集到主节点中。
-
你好@Alfe,此时我刚刚删除了多处理部分并运行代码调用任何工人或线程的函数(process_line(line,x,y,z,t)) 并且数组在每次迭代中仍然没有增长,它只是附加最后一个值。
标签: python pass-by-reference numpy-ndarray