打开多个文件处理程序会减慢写入时间吗?

时间:2011-10-25 00:45:02

标签: python file

在python中,与实际写入时间相比,打开文件处理程序的过程是否缓慢?

一个大文件,一个文件处理程序

import marshal
bigDataStructure = [[1000000.0 for j in range(1000000)] for i in range(1000000)]
f = open('bigFile' , 'w')
marshal.dump(bigDataStructure , f)
f.close()

多个较小的文件,多个文件处理程序

for i , row in enumerate(bigDataStructure):
 f = open(str(i) , 'w'):
 marshal.dump(row , f)
 f.close()

2 个答案:

答案 0 :(得分:2)

我认为多文件处理程序方法可能会更慢,因为每次close()操作都会对文件系统执行写操作。如果你一次编写小块,这比较低级别(操作系统,文件系统,块设备)处理缓冲和写入要慢(因为你可能写的字节数少于扇区大小),确保你不要浪费大量小于扇区大小的写入。

答案 1 :(得分:2)

如果你将它们全部合并,你提到内存耗尽 - 这是神经元的很多。 (至少,根据我的经验,几百个神经元足以满足我们在CS课程中编写的玩具程序。)

您可能不希望创建100,000个单独的文件来存储100,000个单独的神经元 - 当然也不是1,000,000个文件来存储1,000,000个神经元。目录查找,文件打开,读取,关闭和 IO的IO开销将极大地加重加载和保存与非平凡数量的神经元。

当然,如果您正在考虑50或100个神经元,那么无论如何它都会很快,并且可能需要最简单的实现。

但如果这是我的,我会努力为神经元构建良好的数据结构:或许所有给定级别的神经元都可以用整数来描述,以选择神经元类型和整数数组或加倍描述每个神经元的特征,这些级别描述的列表可以很容易地写入单独的文件或单个文件,无论哪个更容易。

如果您的神经元在一个级别内更改类型,或者在级别之间没有完全连接,您可能会发现一些sparse matrix storage设计对于可以同时描述所有神经元的更大数据结构非常有用。

也许真正的问题应该是“如何改善神经元的存储?”

<强>更新

我认为甚至有10,000个神经元证明了制作“组合”存储格式是正确的。我刚刚创建了10,000个小文件,丢弃了我的缓存以测试冷启动,然后单独重新读取每个文件。读取10,000个文件需要14.6秒。读取包含与10,000个文件相同数据的单个文件只需要0.1秒。

如果您的网络每年开始“冷”一次,也许这并不重要。但是如果你的网络每天冷启十几次,你可能会对这种更简单的存储格式感到不满。