Ошибка uWSGI (SIGPIPE) при потоковой передаче больших ответов - PullRequest
0 голосов
/ 14 октября 2018

У меня проблема с потоковой передачей больших gzip-ответов с использованием uWSGI.Мое приложение на Python работает с Flask / gevent на сервере uwsgi с плагином Python.

Я использую следующую команду для запуска сервера: uwsgi -L --http :80 --plugin python --wsgi-file main.py --callable app --processes 4

По конкретному GET-запросу серверначинает потоковую передачу на клиент Content-Type: application/zip Transfer-Encoding: chunked

Хотя некоторые запросы работают нормально и файл загружается на клиент, некоторые запросы получают «сетевую ошибку» на стороне клиента.на сервере я вижу следующую ошибку: SIGPIPE: writing to a closed pipe/socket/fd

Я уже пытался установить более длительные тайм-ауты, запуск моста Python через порт Unix (вместо HTTP) и некоторые другие настройки.Ничто не может решить эту проблему.При загрузке потока я вижу, что данные всегда передаются, они не зависают и не застревают в любой точке, и ошибка возникает внезапно без какого-либо изменения потока данных.Кроме того, загрузка одного и того же файла не выполняется в разное время - может произойти сбой через 100 МБ и через минуту после сбоя после загрузки 350 МБ.

1 Ответ

0 голосов
/ 16 октября 2018

Вы действительно должны подумать об использовании веб-сокетов для этого типа потоковой передачи.Преимущества в том, что они просты в настройке, асинхронны и намного лучше справляются с задержкой в ​​сети.

https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent

...