【发布时间】:2016-02-10 23:50:51
【问题描述】:
所以我正在从一堆不同的文件中读取大量数据。主要的速度障碍之一是读取数据。问题是这些文件位于其时间步长的相应目录中,其中包含该时间步长的每个变量。所以基本上我有一些看起来像这样的函数。
def ReadFiles(path,points,directories,variables):
data = {}
for j in range(len(variables)):
data[variables[j]] = np.zeros((len(timeDirs),numPts))
for i in range(len(timeDirs)):
tfile = str(path) + "/" + str(timeDirs[i])
for j in range(len(variables)):
job_server.submit(ReadData,(args,data,i,j),modules=("np",))
def ReadData(args):
update path for the particular variable
read in data from file
data[variables[j]][i] = that data
TLDR 用 numpy 数组将我拥有的变量初始化为 dict。然后在另一个并行化的函数中更新正确的部分。
我正在使用并行 python。我想在某个时候将此代码移动到集群中。我得到的错误是
File "/home/steven/anaconda2/lib/python2.7/site-packages/pp.py", line 460, in submit
sargs = pickle.dumps(args, self.__pickle_proto)
MemoryError: out of memory
通过观察我的内存使用情况,我可以看到 RAM 上升,然后交换空间开始填满。一旦两者都满了,我就会得到错误。从一些阅读中,我了解到这些过程中的每一个都被传递了一个新字典,这意味着并行更新不是一种选择。
我会注意到,当我串行运行它时,我不会收到此内存错误。那么有没有一种使用并行存储或将这些数据传回我的字典的好方法?最终数据存储在 hdf5 文件中,但这些文件似乎不想被并行打开和写入。
有什么好的解决办法吗?如何并行处理大数据?
【问题讨论】:
标签: python dictionary parallel-processing