【问题标题】:How to handle Broken pipe errors with Flask/gunicorn?如何使用 Flask/gunicorn 处理 Broken pipe 错误?
【发布时间】:2020-03-06 16:35:09
【问题描述】:

我有一个由 gunicorn 运行的 Flask API。据我所知,this SO 链接 gunicorn 应该会自动为我处理任何 Broken pipe 错误,这就是为什么这个错误让我感到困惑的原因。每当用户点击 API 端点时,都会使用 SQLAlchemy 调用 MySQL 数据库。我怀疑 SQLAlchemy 连接在查询后仍保持打开状态,但我无法验证该信息。我在应用程序的日志中发现了以下错误信号,但我自己难以重现该行为。

[INFO] Handling signal: term 
[17] [INFO] Worker exiting (pid: 17) 
[16] [INFO] Worker exiting (pid: 16) 
[24] [INFO] Worker exiting (pid: 24) 
[18] [INFO] Worker exiting (pid: 18) 
[19] [INFO] Worker exiting (pid: 19) 
[22] [INFO] Worker exiting (pid: 22) 
[23] [INFO] Worker exiting (pid: 23) 
[20] [INFO] Worker exiting (pid: 20) 
[21] [INFO] Worker exiting (pid: 21) 
[1] [INFO] Shutting down: Master 
ERROR:sqlalchemy.pool.impl.QueuePool:Exception during reset or similar
BrokenPipeError: [Errno 32] Broken pipe

当用户过早断开连接时,为什么无法处理此行为?如何验证程序终止时哪些连接保持打开状态?

【问题讨论】:

    标签: python flask gunicorn broken-pipe


    【解决方案1】:

    日志显示您的 Gunicorn 正在接收终止信号。事情快要死了,没有什么可真正处理的。

    如果在常规请求期间发生管道损坏,Gunicorn 将处理它。

    【讨论】:

    • 为什么在这种情况下会发生管道损坏错误?如果 gunicorn 收到 term 信号,不应该关闭所有东西吗?
    • 这可能是您的数据库的 Sqlalchemy 池被关闭,而不是 Gunicorn 管理的客户端连接。
    • 我将如何验证/解决这个问题?
    • 这是连接问题还是会话问题
    • 如果任何东西看起来都没有损坏,那就没有问题。
    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 2016-11-04
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2012-06-14
    相关资源
    最近更新 更多