我正在编写的multiprocessing.Process
驱动的脚本没有按预期打印到终端,因此我没有向每个打印函数添加flush=True
,而是将 -u 标志添加到我的 python 命令行中。
所以取而代之的是:
python /path/to/script
我跑了:
python -u /path/to/script
瞧!无数的打印功能都按预期打印。
在无缓冲的情况下运行 Python 脚本除了使打印函数按预期工作之外,还做了什么?(这是我的主要问题...
为什么它首先不是无缓冲的?
谢谢!
当大量输出以增量方式生成但不需要实时处理时,缓冲可提高性能。
例如,如果您从远程服务器下载数据并将其写入文件或控制台,并且您真正关心的只是最终结果(完整文件或完整输出(,那么一次不向文件输出几个字节是合理的,而是等待接收到一大块字节,然后一次将它们全部写入 - 更少的写入时间函数调用,以及(如果写入磁盘(更少的磁盘寻道和更长的连续写入。
通常,Python 的调用将在 python 进程退出和/或缓冲区已满时刷新其输出。您正在执行的操作可能没有正常终止,或者没有生成足够的输出来填充缓冲区,因此没有触发刷新缓冲区的正常条件。