我有一个文件打开写入,一个进程运行了几天 - 在相对随机的时刻写入文件。我的理解是 - 直到我做file.close() - 有可能没有真正保存到磁盘。这是真的吗?
如果系统在主进程尚未完成时崩溃怎么办?是否有一种方法可以做一次提交...说 - 10分钟(我自己称之为提交 - 不需要运行计时器)? file.close()和open(文件,'a')是唯一的方法,还是有更好的选择?
答案 0 :(得分:19)
您应该可以使用file.flush()
来执行此操作。
答案 1 :(得分:3)
如果您不想杀死当前进程以添加f.flush()
(听起来它已经运行了几天?),您应该没问题。如果您看到要写的文件越来越大,那么您将不会丢失该数据......
来自Python文档:
<强>写(STR)强> 将字符串写入文件。没有回报价值。由于缓冲, 字符串可能实际上不会出现 文件直到flush()或close() 方法被称为。
听起来Python的缓冲系统会自动刷新文件对象,但在发生这种情况时无法保证。
答案 2 :(得分:2)
要确保您的数据已写入磁盘,请使用file.flush()
,然后使用os.fsync(file.fileno())
。
答案 3 :(得分:2)
正如已经说过的那样,使用.flush()方法强制写出缓冲区,但是避免使用大量的flush调用,因为这实际上会减慢你的写入速度(如果应用程序依赖于快速写入)因为你将强制你的文件系统写出小于它的缓冲区大小的变化,这可能会让你跪倒在地。 :)