我有一个Flask API正在由gunicorn运行。据我所知并且根据这个 Stack Overflow 链接,gunicorn应该自动处理任何“断开的管道”错误,这就是为什么这个错误让我感到困惑的原因。每当用户访问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
为什么这种情况可能无法处理,即用户过早断开连接,我该如何验证程序终止时哪些连接仍然保持打开状态?