问题现象¶
使用 gradio 创建的 webui 服务部署在 Kubernetes 环境中会出现 Pod 容器中无监听日志、 有时可能还会出现从一开始就卡住导致无法对外提供 http 服务的问题。
示例代码:
import gradio as gr def greet(name): return "Hello " + name + "!" demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox") if __name__ == "__main__": demo.launch()
原因¶
没有输出监听日志的原因是:gradio 的代码中是通过 print() 来输出监听日志的,默认 print() 的输出使用了 buffer。 在 Kubernetes 这类容器环境内,会出现 print() 的输出无法快速显示的问题。
解决办法¶
可以通过下面几个方法中的任一方法解决该问题。
设置环境变量¶
可以通过设置环境变量 PYTHONUNBUFFERED 的值为非空字符串的方式解决该问题:
可以在 Dockerfile 中设置该环境变量:
ENV PYTHONUNBUFFERED=true
也可以在 Pod 的定义中设置该环境变量:
env: - name: PYTHONUNBUFFERED value: 'true'
配置 Pod 定义使用标准输入¶
也可以通过配置 Pod 中的容器定义,让容器使用标准输入来解决该问题。
示例 Pod Yaml:
containers: - image: xxx tty: true stdin: true
Comments