所以我想读一堆非常大的数据文件,每个需要相当一些时间来加载。我想弄清楚如何以最快的方式加载它们,而不会遇到内存问题。一旦数据文件被加载到数组中正确的方式我不需要写入它们,但只需要阅读。我一直在尝试并行化这段时间,但无法弄清楚。Python多处理与数组和多个参数
假设我有400个时间文件。每个文件都是制表符分隔的,每个文件有30个变量,每个变量有40,000个数据点。我想创建一个400x30x40000阵列,以便我可以轻松访问这些点。 数据文件的设置使得前40k点用于变量1,第二个40k用于var 2,依此类推。
我写了一个函数,正确加载时间文件并将其正确存储在我的数组中。我遇到的麻烦是将其并行化。如果我将它放在for循环中并遍历i,这会起作用。
import h5py
import pandas as pd
h5file = h5py.File('data.h5','a')
data = h5file.create_dataset("default",(len(files),len(header),numPts))
# is shape 400x30x40000
def loadTimes(files,i,header,numPts,data):
# files has 400 elements
# header has 30 elements
# numPts is an integer
allData = pd.read_csv(files[i],delimiter="\t",skiprows=2,header=None).T
for j in range(0,len(header)):
data[i,j,:] = allData[0][j*numPts:(j+1)*numPts]
del allData
文件是由subprocess.check_output
(具有约400的元件)的加载时间文件列表中,头是变量列表,从另一文件中加载(在具有30种元素)。 numPts是每个变量的点数(大约40k)。
我试过使用pool.map
加载数据,但发现它不喜欢多个参数。我也尝试使用partial,zip和lambda函数,但没有一个似乎喜欢我的数组。
对于这种方法,我不是一成不变的。如果有更好的方法来做到这一点,我将不胜感激。一次只加载一个数据只需要很长的时间。我的计算表明,使用一个内核加载我的电脑需要大约3个小时。我会用尽我很多的记忆。我可以访问另一台拥有更多内核的机器,这实际上就是我要做这件事的地方,而且我想正确使用它们。