我使用request.body
将AJAX请求数据从jQuery获取到django应用程序,但有时request.body
会导致Dyno超时,我想是因为用户断开连接,django一直在等待用户的请求,异常情况如下:
File "/app/myapp/views.py", line 271, in proccess_api
File "/app/.heroku/python/lib/python2.7/site-packages/django/http/request.py", line 233, in body
File "/app/.heroku/python/lib/python2.7/site-packages/django/http/request.py", line 292, in read
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 51, in read
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 45, in _read_limited
File "/app/.heroku/python/lib/python2.7/site-packages/newrelic-2.60.0.46/newrelic/api/web_transaction.py", line 780, in read
File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/http/body.py", line 212, in read
File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/http/body.py", line 128, in read
File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/http/unreader.py", line 38, in read
File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/http/unreader.py", line 65, in chunk
File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 176, in handle_abort
流程中的行api:
^{pr2}$我在Heroku上使用django1.8.11,例外是用newrelic记录的。在
我的问题是:
request.body
设置一个超时,以便请求不会阻止gunicorn worker?在
我们没有太多你的信息,但是根据你发布的信息。。。在
“如何处理此异常?” 将
req_data = json.loads(request.body)
包装在try
/except
中,如下所示:如果您能告诉
^{pr2}$except
要注意哪些特定的异常,那就更好了:如果没有完整的错误输出(在
File ...
之后的所有内容)告诉我们Python到底抛出了什么错误,就很难说了。有关错误处理here的详细信息。在“是否可以为
request.body
设置超时,以便请求不会阻止gunicorn worker?”我想这不是超时问题。显然链接到该视图的URL得到了某种
request
,并试图读取它的body
。根据您给我们的错误输出,request
模块中的read
抛出错误。这就是为什么你的代码停止了。request
主体不可读这一事实意味着您应该像上面提到的那样将其包装在try
/except
中。在另外,我的帮助是:
req_data = json.loads(request.body.read())
。在看起来这是一个design limitation in gunicorn:
相关问题 更多 >
编程相关推荐