我在 Nginx 后面的 Gunicorn 中运行了一个 Django 应用程序。一切正常,除了一件奇怪的事情:我有一个“下载” View 和一个 RESTful json API。调用下载 View 时,我使用 urllib2 访问 json API 以获取信息。确切地说,当我尝试对 json api 执行此 http get 请求时,请求超时并出现错误 HTTP 错误 504:网关超时。
当我使用 ./manage.py runserver 运行代码时,一切正常。对 json api 的 http get 请求也只需要几毫秒,所以没有遇到超时的危险。
这里是伪代码的情况:
myproject/views.py:(可访问:http://myproject.com/download)
1 def download(request, *args, **kwargs):
2 import urllib2
3 opener = urllib2.build_opener()
4 opener.open('http://myproject.com/api/get_project_stats')
在 Gunicorn 中运行时,第 4 行中的
opener.open()
调用会超时,当使用 ./manage.py runserver
everytihng 运行时运行正常(并且 api 调用只需要几毫秒。有没有人遇到过同样的问题?更重要的是:你是如何解决的?
最佳答案
我在使用 Gunicorn、nGinx、Django 和 Requests 时遇到了同样的问题
每次我这样做:
response = requests.get('http://my.url.com/here')
worker 会超时
我通过从同步 (sync) 工作人员切换到异步 (eventlet) 工作人员解决了这个问题。
如果您正在启动命令行添加:
-k 'eventlet'
如果您使用的是配置文件,请添加:
worker_class = "eventlet"
关于django - Gunicorn worker 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15463067/