如何使用Flask/gunicorn处理Broken pipe错误?

3

我有一个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

为什么这种情况可能无法处理,即用户过早断开连接,我该如何验证程序终止时哪些连接仍然保持打开状态?
1个回答

0
日志显示您的Gunicorn正在接收终止信号。由于事物正在死亡,实际上没有什么可以处理的。
如果在常规请求期间发生断开的管道,Gunicorn将处理它。

为什么在那种情况下会发生“broken pipe”错误?如果gunicorn接收到终止信号,难道不应该关闭所有东西吗? - Josh Zwiebel
这很可能是Sqlalchemy连接池关闭了你的数据库,而不是由Gunicorn管理的客户端连接。 - AKX
我该如何验证/修复它? - Josh Zwiebel
这是一个连接问题还是会话问题? - Josh Zwiebel
如果没有任何问题似乎没有损坏,那就没有问题。 - AKX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接