docker 文件中 PYTHONUNBUFFERED 的用途是什么?

新手上路,请多包涵

我正在观看一个 dockerize 我的 django 应用程序的教程。我不明白为什么我们在 DockerFile 中使用 PYTHONUNBUFFERED 作为环境变量。

你能帮忙吗?

原文由 MayankBudhiraja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

PYTHONUNBUFFERED 设置为不同于 0 的非空值可确保 python 输出,即 stdoutstderr 流直接发送到终端(例如) 无需先缓冲,并且您可以实时查看应用程序的输出(例如 django 日志)。

这也确保了没有部分输出保存在某处的缓冲区中,并且在 python 应用程序崩溃的情况下永远不会被写入。

由于这已在多个评论和补充答案中提到,请注意 PYTHONUNBUFFERED 对输入(即 stdin 流)绝对没有影响。

换句话说,在 docker 容器中关闭对 stdout/stderr 的缓冲主要是为了在容器日志中尽可能快地从正在运行的应用程序获取尽可能多的信息,并且在发生崩溃时不会丢失任何东西。

请注意,关闭缓冲可能会对性能产生影响,具体取决于您的硬件/环境。同时,在大多数情况下,它应该是次要的(除非您的磁盘速度较慢,或者正在写入大量日志,或者有一个坏主意来配置您的 docker 守护程序以将您的日志写入慢速网络驱动器……)。如果这是一个问题,可以保留缓冲,并且您可以在需要时直接从应用程序中刷新缓冲区。有关此主题,请参阅下面的链接 [4]。

参考:

原文由 Zeitounator 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题