我认为编写文件会提供实时输出,因为当我使用C / C ++编写文件时就是如此。但是当我运行python程序时,输出文件似乎总是0字节,直到整个程序运行完毕。即使对于nohup python xxx.py &
,文件print
中的nohup.out
内容也不是实时的,只能在执行后才能看到。
我现在正在运行非常大的程序,并希望看到文件中的进度,我该如何实现呢?
答案 0 :(得分:6)
您的文件可以缓冲两点 - Python的内部缓冲区和操作系统上的缓冲区。这是一种性能提升,可以在缓冲区填满时避免系统调用和磁盘写入。
调用file.flush()
会将内部缓冲区推送到操作系统。您还可以调用fsync
来请求操作系统保存到磁盘。
通常,您可以让操作系统执行它最熟悉的操作,因此对大多数应用程序来说,调用flush
通常就足够了。 Python的内部缓冲区也是如此 - 它在性能方面最了解,但您可能需要更频繁的写入并愿意支付额外的成本。了解确切成本的唯一方法是两种方式进行衡量。