【问题标题】:Why I do not see realtime output in the output file?为什么我在输出文件中看不到实时输出?
【发布时间】:2013-09-30 22:12:52
【问题描述】:

我认为编写文件可以提供实时输出,因为当我使用 C/C++ 编写文件时就是这样。但是当我运行 python 程序时,输出文件似乎总是 0 字节,直到整个程序完成运行。即使对于nohup python xxx.py &,文件nohup.out 中的print 内容也不是实时的,只能在执行后才能看到。 我现在正在运行非常大的程序,想查看文件中的进度,我该如何实现呢?

【问题讨论】:

  • 你可能需要刷 f.flush()
  • 刷新输出缓冲区。出于性能原因,它将分块写入。
  • @FooBarUser 谢谢大家,我试试看。
  • @JohnFoley 顺便说一句,如果我经常执行 f.flush() 是否会非常损害效率?
  • "因为当我使用 C/C++ 编写文件时是这样的" - 不。通过 C 或 C++ 中的<stdio.h> 例程写入文件具有完全相同的问题——缓冲——以及完全相同的解决方案——fflush()

标签: python file output


【解决方案1】:

您的文件可以缓冲两个点 - Python 的内部缓冲区和操作系统上的缓冲区。这是一种性能提升,可在缓冲区填满时避免系统调用和磁盘写入。

调用file.flush() 会将内部缓冲区推送到操作系统。您还可以调用fsync请求操作系统保存到磁盘。

通常您可以让操作系统去做它最擅长的事情,因此调用flush 通常对于大多数应用程序来说就足够了。 Python 的内部缓冲区也是如此——它最了解性能,但您可能需要更频繁的写入并愿意支付额外的成本。了解确切成本的唯一方法是双向衡量。

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 2012-03-31
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多