如何配置我的uWsgi服务器以防止出现不可读的错误?

Sai*_*hna 11 python wsgi uwsgi

这就是问题:

  File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/six.py", line 535, in next
    return type(self).__next__(self)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/http/multipartparser.py", line 344, in __next__
    output = next(self._producer)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/six.py", line 535, in next
    return type(self).__next__(self)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/http/multipartparser.py", line 406, in __next__
    data = self.flo.read(self.chunk_size)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/http/request.py", line 267, in read
    six.reraise(UnreadablePostError, UnreadablePostError(*e.args), sys.exc_info()[2])
  File "/app/.heroku/python/lib/python2.7/site-packages/django/http/request.py", line 265, in read
    return self._stream.read(*args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 59, in read
    result = self.buffer + self._read_limited(size - len(self.buffer))
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 47, in _read_limited
    result = self.stream.read(size)
UnreadablePostError: error during read(65536) on wsgi.input
Run Code Online (Sandbox Code Playgroud)

我目前的配置如下:

[uwsgi]
http-socket = :$(PORT)
master = true
processes = 4
die-on-term = true
module = app.wsgi:application
memory-report = true
chunked-input-limit = 25000000
chunked-input-timeout = 300
socket-timeout = 300
Run Code Online (Sandbox Code Playgroud)

Python:2.7 .x | uWsgi:2.0 .10

为了使问题更加具体,当我同步处理图像以及图像上传时,就会发生这种情况.我知道理想情况下我必须使用Celery,但由于业务需求,我无法做到这一点.因此需要以允许我接受大图像文件,处理它然后返回响应的方式配置超时.

任何关于这个问题的亮点都会非常有帮助.谢谢.

lfa*_*one 3

描述中引用的错误并非全部;相关部分是该批次条目:

\n\n
[uwsgi-body-read] Error reading 65536 bytes \xe2\x80\xa6 message: Client closed connection uwsgi_response_write_body_do() TIMEOUT\n
Run Code Online (Sandbox Code Playgroud)\n\n

引发这个特定错误的原因是(很可能)客户端或者它与 uWSGI 之间的某些东西中止了请求。

\n\n

造成这种情况的可能原因有很多:

\n\n
    \n
  • 一个有缺陷的客户端
  • \n
  • 网络级过滤(DPI或某些配置错误的防火墙)
  • \n
  • uWSGI 前面的服务器中的错误/配置错误
  • \n
\n\n

uWSGI 文档中介绍了最后一个:

\n\n
\n

如果您计划将 uWSGI 放在代理/路由器后面,请确保它支持分块输入请求(或通常是原始 HTTP 请求)。

\n
\n\n

要验证您的问题确实不在 uWSGI 中,请尝试通过托管 uWSGI 应用程序的服务器上的控制台上传文件。绕过 nginx/haproxy 等,直接访问 HTTP 端点。

\n