我正在观看一个 dockerize 我的 django 应用程序的教程。我不明白为什么我们在 DockerFile 中使用 PYTHONUNBUFFERED
作为环境变量。
你能帮忙吗?
原文由 MayankBudhiraja 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在观看一个 dockerize 我的 django 应用程序的教程。我不明白为什么我们在 DockerFile 中使用 PYTHONUNBUFFERED
作为环境变量。
你能帮忙吗?
原文由 MayankBudhiraja 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答2.4k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答800 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.6k 阅读
2 回答1.2k 阅读
将
PYTHONUNBUFFERED
设置为不同于 0 的非空值可确保 python 输出,即stdout
和stderr
流直接发送到终端(例如) 无需先缓冲,并且您可以实时查看应用程序的输出(例如 django 日志)。这也确保了没有部分输出保存在某处的缓冲区中,并且在 python 应用程序崩溃的情况下永远不会被写入。
由于这已在多个评论和补充答案中提到,请注意
PYTHONUNBUFFERED
对输入(即stdin
流)绝对没有影响。换句话说,在 docker 容器中关闭对 stdout/stderr 的缓冲主要是为了在容器日志中尽可能快地从正在运行的应用程序获取尽可能多的信息,并且在发生崩溃时不会丢失任何东西。
请注意,关闭缓冲可能会对性能产生影响,具体取决于您的硬件/环境。同时,在大多数情况下,它应该是次要的(除非您的磁盘速度较慢,或者正在写入大量日志,或者有一个坏主意来配置您的 docker 守护程序以将您的日志写入慢速网络驱动器……)。如果这是一个问题,可以保留缓冲,并且您可以在需要时直接从应用程序中刷新缓冲区。有关此主题,请参阅下面的链接 [4]。
参考: