Python: 文件IO - 禁用增量刷新

3

这个问题与这个问题相反。

有没有一种方法可以告诉Python“在我命令你关闭或刷新文件之前,请不要写入磁盘”?我正在向网络上的文件写入内容,宁愿一次性写入整个文件。

同时,我正在使用StringIO缓冲区进行写入,最后再将其写入磁盘。


为什么要等到计算完成后再变成I/O限制呢?这样做有什么可能的价值呢? - S.Lott
服务器设置在关闭之前提交文件缓存,这会拖慢一切速度。虽然这可以防止数据丢失,但我正在写的文件如果不完整就毫无用处。一次性将文件写入磁盘已经被证明更快。 - Jason Coon
3个回答

3

不,从Python手册上看,并没有选项可以将缓冲区大小设置为无限大。

你当前的解决方案基本上是相同的概念。

可以使用Alex的想法,但我会因以下原因而反对:

  1. The buffer size on open is limited to 2^31-1 or 2 gigs. Any larger will result in "OverflowError: long int too large to convert to int"
  2. It doesn't seem to work:

    a = open("blah.txt", "w", 2 ** 31 - 1)
    for i in xrange(10000): 
        a.write("a")
    

在不关闭Python的情况下打开文件,您将看到文本内容。


3

您可以使用任意大小的缓冲区打开文件。例如,要使用最多十亿字节进行缓冲,请使用x=open('/tmp/za', 'w', 1000*1000*1000) -- 如果您有一百亿字节的内存并想要全部使用,只需再添加一个*100...;-)。内存只会在实际需要的量上被消耗,因此不必担心...


1

我想说这在一定程度上取决于你想做什么。

我遇到这个问题的情况是当我的应用程序创建一个被另一个应用程序使用的文件时有点慢,另一个应用程序会得到不完整的文件版本。

我通过将文件写入不同的位置,然后在完成写入后将其重命名为正确的位置来解决这个问题。

如果您出于其他原因需要这样做,那么可能没有帮助。


这值得测试。在本地编写文件并使用操作系统将其复制到网络可能更快。谢谢。 - Jason Coon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接