12

我有一个 Django 应用程序在 Nginx 后面的 Gunicorn 中运行。一切正常,除了一件奇怪的事情:我有一个“下载”视图和一个 RESTful json API。调用下载视图时,我使用 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')

opener.open()在 Gunicorn 中运行时,第 4 行中的调用会超时,而使用./manage.py runservereverytihng 运行时工作正常(并且 api 调用只需要几毫秒。

有没有人有同样的问题?更重要的是:你是如何解决的?

4

1 回答 1

15

我在使用 Gunicorn、nGinx、Django 和Requests时遇到了同样的问题

每次我这样做:

response = requests.get('http://my.url.com/here')

工人会超时

我通过从同步(同步)工作人员切换到异步(事件小)工作人员解决了这个问题。

如果您正在启动命令行添加:

-k 'eventlet'

如果您使用的是配置文件,请添加:

worker_class = "eventlet"
于 2013-06-08T16:02:27.583 回答