Как справиться с ошибками сломанной трубы с помощью Flask / gunicorn? - PullRequest
1 голос
/ 06 марта 2020

У меня есть Flask API, которым управляет gunicorn. Насколько мне известно и этот SO связывает gunicorn, должен автоматически обрабатывать любые ошибки сломанной трубы, поэтому эта ошибка сбивает меня с толку. Всякий раз, когда пользователь достигает конечной точки API, выполняется вызов базы данных MySQL с помощью SQLAlchemy. Я подозреваю, что соединение 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 голосов
/ 06 марта 2020

В журнале говорится, что ваш Gunicorn получает сигнал завершения. Ничего не поделаешь, потому что все умирает.

Gunicorn справится со сломанной трубой, если это произойдет во время обычного запроса.

...