python中是否有用于写入文件的提交模拟?

python中是否有用于写入文件的提交模拟?,python,file-io,commit,buffering,Python,File Io,Commit,Buffering,我打开了一个文件进行写入,一个进程运行了几天——一些东西在相对随机的时刻写入文件。我的理解是——在我执行file.close()之前——有可能什么都没有真正保存到磁盘上。这是真的吗 如果主进程尚未完成时系统崩溃怎么办?有没有一种方法可以每天做一次承诺。。。比如说——10分钟(我自己称之为提交——不需要运行计时器)?file.close()和open(file,'a')是唯一的方法,还是有更好的替代方法?您应该能够使用file.flush()来执行此操作。如果您不想终止当前进程来添加f.flush

我打开了一个文件进行写入,一个进程运行了几天——一些东西在相对随机的时刻写入文件。我的理解是——在我执行file.close()之前——有可能什么都没有真正保存到磁盘上。这是真的吗


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

您应该能够使用
file.flush()
来执行此操作。

如果您不想终止当前进程来添加
f.flush()
(听起来它已经运行了好几天了?),您应该可以。如果您看到要写入的文件越来越大,您不会丢失这些数据

从Python文档:

写入(str) 将字符串写入文件。没有返回值。由于缓冲, 字符串实际上可能不会显示在中 直到flush()或close()关闭 方法被调用


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

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

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

如果您希望告诉操作系统立即将其写入磁盘(而不是可能留在操作系统缓冲区中,并在突然断电时迷失方向),在
冲洗后
flush
刷新Python的用户模式缓冲区,
fsync
刷新操作系统内核模式缓冲区(并且经常向底层磁盘硬件建议它实际上立即将其写入,尽管有许多磁盘存在,因此它可能会在磁盘缓冲区中停留一段时间)。