【问题标题】:Gunicorn worker timeoutGunicorn 工作者超时
【发布时间】:2013-06-09 00:02:27
【问题描述】:

我有一个 Django 应用程序在 Nginx 后面的 Gunicorn 中运行。一切正常,除了一件奇怪的事情:我有一个“下载”视图和一个 RESTful json API。调用下载视图时,我使用 urllib2 访问 json API 以获取信息。而正是当我尝试对 json api 执行此 http get 请求时,请求超时并出现错误 HTTP Error 504: Gateway Time-out。

当我使用 ./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 中运行时,第四行的 opener.open() 调用会超时,而使用 ./manage.py runservereverytihng 运行时可以正常工作(并且 api 调用只需要几毫秒。

有人遇到过同样的问题吗?更重要的是:您是如何解决的?

【问题讨论】:

标签: django nginx timeout gunicorn


【解决方案1】:

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

每次我这样做:

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

工人会超时

我通过从同步 (sync) 工作程序切换到异步 (eventlet) 工作程序解决了这个问题。

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

-k 'eventlet'

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

worker_class = "eventlet"

【讨论】:

  • 感谢您的回答!就是这个! (但我没有用异步 eventlet 工作人员解决这个问题。我通过使用 celery 在异步任务中执行 HTTP 请求解决了这个问题。)
  • 你也必须安装 eventlet。我使用了pip install eventlet,然后在命令行中添加了--worker-class eventlet
  • eventlet 是有风险的,你的代码的每一部分都需要异步并且库猴子补丁。它可能会产生意想不到的后果。
猜你喜欢
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2014-10-22
  • 2019-08-12
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
相关资源
最近更新 更多