我打开了一个文件以供写入,并且一个进程运行了几天——在相对随机的时刻将某些内容写入文件。我的理解是——在我执行 file.close() 之前——有可能没有任何东西真正保存到磁盘上。真的吗?
如果主进程还没有完成,系统崩溃了怎么办?有没有一种方法可以每隔......比如说——10分钟(我自己称之为提交——不需要运行计时器)进行一次提交?file.close() 和 open(file,'a') 是唯一的方法,还是有更好的选择?
您应该可以使用它file.flush()
来执行此操作。
如果您不想杀死当前要添加的进程f.flush()
(听起来它已经运行了好几天了?),您应该没问题。如果您看到要写入的文件变大,则不会丢失该数据...
来自 Python 文档:
write(str) 将字符串写入文件。没有返回值。由于缓冲,在调用 flush() 或 close() 方法之前,字符串可能不会真正显示在文件中。
听起来 Python 的缓冲系统会自动刷新文件对象,但不能保证何时会发生这种情况。
要确保您的数据已写入磁盘,请使用file.flush()
后跟os.fsync(file.fileno())
.
如前所述,使用 .flush() 方法强制写入缓冲区,但避免使用大量调用来刷新,因为这实际上会减慢您的写入速度(如果应用程序依赖于快速写入),因为您将迫使您的文件系统写入小于其缓冲区大小的更改,这可能会让您屈服。:)