2015-08-28 41 views
1

我试图在处理后向磁盘写入大量文件[2000-2500]。我注意到,前100张图像快速写入磁盘,然后出现放缓。为什么会发生这种情况,我能做些什么来加速这一过程?在python中写入大量文件,最后明显减速

这是我的代码写入图像:

for b in range(Data.shape[1]): 
    t0 = time.clock() 
    img = Data[:,b] 
    img = np.reshape(img,(501,501)) 

    save = os.path.join(savedir,"%s_%s"%(item,b)) 
    plt.imshow(img).figure.savefig(save) 
    print "Saved %s of %s in %s seconds"%(b,Data.shape[1],time.clock()-t0) 

编辑:

Saved 0 of 1024 in 0.103277 seconds 
Saved 1 of 1024 in 0.0774039999999 seconds 
Saved 2 of 1024 in 0.0883339999998 seconds 
Saved 3 of 1024 in 0.0922500000001 seconds 
Saved 4 of 1024 in 0.0972509999999 seconds 

而且经过几次反复:

Saved 1018 of 1024 in 2.152941 seconds 
Saved 1019 of 1024 in 2.163633 seconds 
Saved 1020 of 1024 in 2.198959 seconds 
Saved 1021 of 1024 in 2.172303 seconds 
Saved 1022 of 1024 in 2.19014 seconds 
Saved 1023 of 1024 in 2.203727 seconds 
+0

为什么使用'plt.imshow(img).figure.savefig(save)'来写入数据?您已经在使用'print'保存%s%s(%s,Data.shape [1])来调试进程,我想您可以使用其他numpy方法来写入数据。 – ZdaR

+0

您能否添加更多信息 - 您如何知道增速放缓?你有分析信息吗?如果是的话,你可以包括一个(小而相关)的片段? – scytale

+0

@scytale - 更新了问题 – shaunakde

回答

2

每次使用plt.imshow时间,为您打造一个新的AxesImage,这将分别占用一些记忆。为了加快速度,您可以在每次保存后清除数字clf()

您可以使用len(plt.gca().images)来查看此图片,以查看您打开了多少张图片。如果没有clf()一行,您会看到每次迭代都会增加1。

for b in range(Data.shape[1]): 
    img = Data[:,b] 
    img = np.reshape(img,(501,501)) 
    print "Saving %s of %s"%(b,Data.shape[1]) 
    save = os.path.join(savedir,"%s_%s"%(item,b)) 
    plt.imshow(img).figure.savefig(save) 
    print "There are %d image(s) open"%len(plt.gca().images) 
    plt.gcf().clf() # clear the figure 
+0

测试这个。将在10分钟内报告。最终保存之上的处理也需要时间来完成。 – shaunakde

+0

完美地工作。谢谢 – shaunakde