这似乎是一个简单的问题,但我无法理解它.
我有一个在双循环中运行的模拟,并将结果写入HDF文件.该程序的简单版本如下所示:
import tables as pt
a = range(10)
b = range(5)
def Simulation():
hdf = pt.openFile('simulation.h5',mode='w')
for ii in a:
print(ii)
hdf.createGroup('/','A%s'%ii)
for i in b:
hdf.createArray('/A%s'%ii,'B%s'%i,[ii,i])
hdf.close()
return
Simulation()
Run Code Online (Sandbox Code Playgroud)
这段代码正是我想要的,但由于这个过程可能需要很长时间才能运行,我尝试使用多处理模块并使用以下代码:
import multiprocessing
import tables as pt
a = range(10)
b = range(5)
def Simulation(ii):
hdf = pt.openFile('simulation.h5',mode='w')
print(ii)
hdf.createGroup('/','A%s'%ii)
for i in b:
hdf.createArray('/A%s'%ii,'B%s'%i,[ii,i])
hdf.close()
return
if __name__ == '__main__':
jobs = []
for ii in a:
p = multiprocessing.Process(target=Simulation, args=(ii,))
jobs.append(p)
p.start()
Run Code Online (Sandbox Code Playgroud)
然而,这仅将最后一次模拟打印到HDF文件,不知何故它会覆盖所有其他组.
这个问题与我之前提出的问题有关,这似乎是一个简单的问题,但是我很难找到有关多处理主题的有用信息或教程。
我的问题是我想将产生的数据合并为一个大数组,然后将其存储在我的hdf文件中。
def Simulation(i, output):
# make a simulation which outputs it resutlts in A. with shape 4000,3
A = np.array([4000,3])
output.put(A)
def handle_output(output):
hdf = pt.openFile('simulation.h5',mode='w')
hdf.createGroup('/','data')
# Here the output should be joined somehow.
# I would like to get it in the shape [4000,3,10]
output.get()
hdf.createArray('/data','array',A)
hdf.close()
if __name__ == '__main__':
output = mp.Queue()
jobs = []
proc = mp.Process(target=handle_output, args=(output, ))
proc.start()
for i in range(10):
p = mp.Process(target=Simulation, args=(i, output))
jobs.append(p)
p.start()
for …Run Code Online (Sandbox Code Playgroud)