在执行读取和处理大量数据的程序时,我面临着处理器时间从特定点突然变长的现象。
以下是详细说明。
目标数据的目录构成是日/小时/分钟,并且在每个分钟目录中存储大约700个数据文件(hdf5)。例如,01/23/52 / file1.h5。每个h5文件的大小约为200kB。因此,数据的总大小为每分钟140MB,每小时8.4GB和每天200GB。我的程序读取h5文件并使用pandas每隔一分钟存储数据并每隔一小时处理一次。
以下代码是我程序的摘录。
import pandas as pd
import time
...
hours=["00","01",......,"23"]
minutes=["00","01",.....,"59"]
...
f=open("log.txt","w")
for thishour in hours:
onehourdata=pd.DataFrame()
for thisminute in minutes:
filepath=pathtodata+"/"+thishour+"/"+thisminute+"/"
filelist=os.listdir(filepath)
onemindata=pd.DataFrame()
dflist=[]
ptime1=time.clock()
for thisfile in filelist:
filename=filepath+thisfile
store=pd.HDFStore(filename)
newdata=store["table"]
store.close()
dflist.append(newdata)
ptime2=time.clock()
f.write("hour:{0} min:{1} p2-p1:{2}".format(thishour,thisminute,ptime2-ptime1))
onemindata=pd.concat(dflist)
onehourdata=pd.concat([onehourdata,onemindata])
onehourdata=onehourdata.groupby([column1,column2,column3],as_index=False).sum()
...
...
我执行了程序并获得了log.txt
hour:00 min:00 p2-p1:15.01
...
...
...
hour:20 min:50 p2-p1:17.02
hour:20 min:51 p2-p1:14.33
hour:20 min:52 p2-p1:40.25
hour:20 min:53 p2-p1:42.52
...
...
hour:22 min:30 p2-p1:41.62
...
...
hour:23 min:59 p2-p1:50.21
当我为同一天的数据执行程序时,处理器时间从同一点变长。此外,结果是相同的,虽然我执行生成孙子进程并使用fork杀死父进程。当使用line profiler进行调查时,结果发现newdata = store [“table”]的行花费的时间最多。
环境是Ubuntu Server 13.04-x86_64,内存大小为512GB。
为什么处理器时间突然变长?
谢谢。