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