小编use*_*958的帖子

使用多处理将数据写入hdf文件

这似乎是一个简单的问题,但我无法理解它.

我有一个在双循环中运行的模拟,并将结果写入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文件,不知何故它会覆盖所有其他组.

python hdf5 multiprocessing

9
推荐指数
1
解决办法
3782
查看次数

结合输出多处理python

这个问题与我之前提出的问题有关,这似乎是一个简单的问题,但是我很难找到有关多处理主题的有用信息或教程。

我的问题是我想将产生的数据合并为一个大数组,然后将其存储在我的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)

python multiprocessing

4
推荐指数
1
解决办法
5731
查看次数

标签 统计

multiprocessing ×2

python ×2

hdf5 ×1