Depois de confirmar que o comando uwsgi
que eu estava testando era compatível com todas as opções que eu forneci no arquivo .ini
, percebi que meu arquivo .ini
continha processes = 5
enquanto o comando uwsgi
Eu estava testando com não. Se eu adicionar --processes=5
ao meu comando uwsgi
, poderei reproduzir o problema de truncamento em cada hit, não apenas em cada segundo pedido. Sempre que inicio o uwsgi
server com --processes=5
, a primeira solicitação é bem-sucedida, a segunda gera 500, e todas as solicitações subsequentes são truncadas para 9,99MB com o seguinte erro no console:
[2017-01-08 04:16:08,959] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.4/dist-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.4/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "./flaskapp.py", line 13, in main
flag = dont_tread_on_memes.dont_me(caption)
File "./dont_tread_on_memes/__init__.py", line 30, in dont_me
return tread_on("don't {} me".format(phrase))
File "./dont_tread_on_memes/__init__.py", line 16, in tread_on
flag = BLANK_FLAG.copy()
File "/usr/local/lib/python3.4/dist-packages/PIL/Image.py", line 1010, in copy
self.load()
File "/usr/local/lib/python3.4/dist-packages/PIL/ImageFile.py", line 226, in load
"(%d bytes not processed)" % len(b))
OSError: image file is truncated (0 bytes not processed)
A minha suspeita é que este é um problema com o Pillow e a maneira como o uwsgi
lida com o threading. Talvez o comportamento de todos os outros pedidos tenha sido devido à maneira como uwsgi
decide gerar novos processos e eliminar processos antigos ou devido ao armazenamento em cache pelo NGINX. De qualquer forma, eu corrigi o problema de truncamento.
Também encontrei este no StackOverflow de alguém com o mesmo problema.
Se alguém mais puder responder por que isso ocorreu, ou uma resposta de como posso manter isso resolvido e deixar uwsgi
gerar vários processos, eu certamente consideraria essa resposta mais completa e a aceitaria .