Isso parece um problema bem conhecido com os tempos limite de Nginx + uWSGI, mas minha configuração é diferente e não consegui encontrar informações sobre isso.
Eu executo um aplicativo Flask no uWSGI, no protocolo http (sem soquetes). Quando eu consultar minha API, às vezes recebo um erro:
uwsgi_response_write_body_do() TIMEOUT !!!
IOError: : write error
Recebo mais vezes durante o "horário comercial", ou seja, não com muita frequência à noite. Estou consultando dados JSON longos (coordenadas geográficas, até 50 MBytes) e às vezes não obtenho nenhuma resposta, e às vezes recebo parte da resposta. Estes são erros da solicitação requests
do Python:
requests.exceptions.ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))
ValueError: Expecting object: line 1 column 5590371 (char 5590370)
ValueError: Unterminated string starting at: line 1 column 20998536 (char 20998535)
ValueError: end is out of bounds
# when I set 'timeout=None' in Python
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='mydomain.com', port=80): Read timed out. (read timeout=None)
A conexão é sobre HTTP simples (sem S). Minha configuração do uWSGI abaixo:
[uwsgi]
module = run:app
pidfile = /tmp/app.pid
logto = /var/log/uwsgi/%n.log
master = true
processes = 2
http-socket = 0.0.0.0:someport
http-timeout = 300
die-on-term = true
E eu executo isso usando uwsgi /path/to/inifile
. Não há Nginx, mas na verdade antes, com o Nginx, eu estava recebendo os mesmos problemas. Então eu descartei este aqui.
Como posso evitar esses tempos limite?