Python中flush()函数的作用是什么?为何测试有无该函数结果一致?
Python中flush()函数的作用
你之前的测试没看出flush()的区别,核心问题是你在调用flush()之前已经执行了close()——文件对象关闭后,flush()不会起任何作用,而且close()本身就会自动触发flush操作,把缓冲区里的内容写入磁盘,所以两次测试结果完全一致。
先搞懂缓冲区的机制
Python对文件做写入操作时,不会立刻把内容写到磁盘上,而是先暂存在内存缓冲区里。这么做是为了提升IO效率——磁盘写入是慢操作,攒够一定量再一次性写入,能减少磁盘IO的次数。
flush()的实际作用
flush()的唯一作用就是强制把当前缓冲区里的所有内容立刻写入磁盘,不需要等缓冲区填满,也不需要等文件关闭。
正确的测试例子
比如下面的代码,就能看出flush的效果:
file_obj = open("test_flush.txt", "w") # 写入内容,但此时内容还在缓冲区,磁盘文件是空的 file_obj.write("this is a test") # 调用flush,强制把缓冲区内容写入磁盘 file_obj.flush() # 此时打开test_flush.txt,已经能看到写入的内容了 file_obj.close()
再举个实用场景:实时日志输出。如果你需要程序运行时,日志能立刻出现在磁盘文件里,而不是等程序结束才一次性写入,就必须用flush():
import time with open("live_log.txt", "w") as log_file: for count in range(3): log_content = f"第{count+1}条日志\n" log_file.write(log_content) log_file.flush() # 强制写入磁盘,实时更新文件内容 print(f"已写入日志: {log_content.strip()}") time.sleep(2)
运行这段代码时,你可以中途打开live_log.txt,能看到日志一条一条实时出现;如果去掉flush(),日志会在循环结束后才一次性写入文件。
关键总结
close()会自动调用flush(),所以关闭文件前不需要手动执行flush。- 只有当你需要在文件保持打开状态时,就把内容同步到磁盘的场景下,才需要用到
flush()。
内容的提问来源于stack exchange,提问作者user20987481
相关产品推荐
相关产品推荐

