【发布时间】: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