我在Nginx后面的Gunicorn中运行了一个Django应用程序。一切正常,可以解决一件奇怪的事情:我有一个“下载”视图和一个RESTful json API。调用下载视图时,我使用urllib2访问json API以获取信息。并且当我尝试对json api执行此http请求时,请求超时,出现错误HTTP错误504:网关超时。
当我使用./manage.py运行服务器运行代码时,一切正常。对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')
第4行中的opener.open()
调用在Gunicorn中运行时会超时,当使用./manage.py runserver
运行时,everytihng工作正常(并且api调用只需几毫秒。
有没有人有同样的问题?更重要的是:你是如何解决它的?
答案 0 :(得分:14)
使用Gunicorn,nGinx,Django和Requests
我有同样的问题我每次都这样做:
response = requests.get('http://my.url.com/here')
工人会超时
我通过从Syncronous(同步)工作者切换到异步(eventlet)工作者来解决问题。
如果要启动命令行add:
-k 'eventlet'
如果您使用的是配置文件,请添加:
worker_class = "eventlet"