8

我打开了一个文件以供写入,并且一个进程运行了几天——在相对随机的时刻将某些内容写入文件。我的理解是——在我执行 file.close() 之前——有可能没有任何东西真正保存到磁盘上。真的吗?

如果主进程还没有完成,系统崩溃了怎么办?有没有一种方法可以每隔......比如说——10分钟(我自己称之为提交——不需要运行计时器)进行一次提交?file.close() 和 open(file,'a') 是唯一的方法,还是有更好的选择?

4

4 回答 4

21

您应该可以使用它file.flush()来执行此操作。

于 2009-03-03T21:34:57.467 回答
3

如果您不想杀死当前要添加的进程f.flush()(听起来它已经运行了好几天了?),您应该没问题。如果您看到要写入的文件变大,则不会丢失该数据...

来自 Python 文档:

write(str) 将字符串写入文件。没有返回值。由于缓冲,在调用 flush() 或 close() 方法之前,字符串可能不会真正显示在文件中。

听起来 Python 的缓冲系统会自动刷新文件对象,但不能保证何时会发生这种情况。

于 2009-03-03T21:51:08.753 回答
2

要确保您的数据已写入磁盘,请使用file.flush()后跟os.fsync(file.fileno()).

于 2009-03-03T22:34:33.140 回答
2

如前所述,使用 .flush() 方法强制写入缓冲区,但避免使用大量调用来刷新,因为这实际上会减慢您的写入速度(如果应用程序依赖于快速写入),因为您将迫使您的文件系统写入小于其缓冲区大小的更改,这可能会让您屈服。:)

于 2009-03-04T06:41:06.653 回答