三个多小时过去了,磁盘交换区的临时文件还在疯狂变动,数据结果还没出来。
“一个小时出结果。”
运行程序前,我向小罗拍着胸口保证,小罗已经问过我两次,没有得到想要的答案。小罗不再问了,我心里却更加恐慌起来,生怕耽误小罗的工作。本来小罗计划数据结果出来之后,马上去移交资料,当时听到输出数据结果需要一小时,小罗还怕我估算有问题,特意多给我一个小时时间,没想到三个多小时数据结果还没出来。
一个小时出结果,这句话我倒也不是拍脑袋。小罗的数据处理和小文的内容差不多,甚至输入数据之一完全相同,只是区县不同而已。小文的数据有七千多宗,小罗的数据只有六千多宗。小文的数据结果有七千多个文档,一宗数据对应一宗文档,小罗的数据结果只需要一个表格,一个表格内装满六千多宗的结果即可。小文的数据,我用程序跑出来只用了一个多小时,依次类推,小罗的数据量更小,结果更简单,只有一个表格,应该会更快,程序也是我套用的同一套代码,我只是在处理小文数据的程序代码基础上,稍做改编,电脑还是同一台电脑,计算速度一致。所以需要一个小时,我是经过认真分析之后得出的结论。
可程序运行的结果却无情地告诉我,一个小时绝不可能完成,时间已经过去三个多小时。小罗问我,到底什么时候完成,希望能得到一个准确时间。小罗和我关系极好,也不怕我生气,就这么直接问我准确时间,他不用担心我罢工不干。都是鹿山三剑客成员,话说得再直接,甚至再难听,我都得接住,坚持完成任务。面对小罗这个问题,我也只能厚颜无耻地回答说不准。说不准的原因主要还是在我,写程序的时候,偷工减料,节约了很多功能,尤其是没有输出处理进度信息,甚至连当前处理到第几个我都省略了,以至于现在看着程序界面,一动也不动,什么提示也没有,处理到哪里了,还剩余多少,全部都不知道。我只有打开磁盘上临时数据交换目录,看着屏幕上临时文件跳动,心里暗暗数秒,临时文件变换一次,就是处理完一宗数据。只盯着屏幕,心里大约暗暗数了十几次,估摸出处理效率大约三秒钟一宗,以此计算,大约需要五个小时才能完成。
五个小时相对于一个小时,差距实在太大。我赶紧打开源码,查找原因。对比原来处理小文数据的程序,处理小罗数据的程序多了一个步骤,这个步骤恰恰是空间分析,这时我才明白,相对于文档数据操作,空间分析需要更多的算力,会消耗更多的时间。而在小文的数据处理过程中,我相对巧妙的通过拆分输入文件名称,获得两个变量,大大减少空间分析计算,从而节约时间。相比较而言,空间分析计算完成后,批量文档操作并不会消耗多少时间。再仔细看下处理小罗数据的源码,我心里更加不安起来。我为了节约时间,直接用一个列表接收处理结果,这样做的好处,一是代码简洁,格式统一,二是便于下一步表格结果输出。看着眼前不断变换的临时交换文件,我不由地担心另一个重大问题。内存溢出,一旦内存溢出,便是前功尽弃,看来python的内存管理,我还是没有学得很透,周末做测试时,只用了五宗数据,很快就得到想要的结果。测试数据量与实际操作数据量,完全不是一个数量级,一个列表存入五条记录和存入六千多条数据完全是两个概念,好比一个大缸倒入五桶水不会溢出,不能说明倒入六千桶水也不会溢出。
程序与水缸不同,水缸就算溢出了,至少还能保留溢出前的水量,程序一旦内存溢出,那就意味着,前功尽弃。只有默默祈祷,内存千万不要溢出,下次我一定改正。
网友评论