Django和Gunicorn - 网关超时循环

时间:2018-03-29 05:06:41

标签: django nginx gunicorn

我试图在1GB数字海洋液滴内设置Django项目。该项目的一个关键功能是从.ods文件导入数据。

使用Django开发服务器manage.py runserver测试项目时(已经在Droplet中)我可以导入相当多的行 - 最多20000没有问题,并且没有吃掉服务器的内存迭代ods文件的循环每100行休眠2秒。

但是当使用Gunicorn(与nginx一起使用)时,平均只处理20到30行。在此之后,我发现Gateway超时504代码错误。

我已经尝试过没有结果:

  • 增加枪支工人的超时时间
  • 在工作人员
  • 中安装eventlet并使用--worker-class eventlet
  • 将我的Droplet升级到4GB Ram / 2 Cpus计划并增加到--workers 6

这是代码的简化版本的样子:

    table = read(path_to_ods_file)
    stop_every_rows = 100
    rows_done = 0
    stop_seconds = 1

    for i in range(len(table)):
      Profile.objects.create(
        first_name=table[i][0],
        last_name=table[i][0],
      )

      rows_done += 1
      if rows_done >= stop_every_rows:
          rows_done = 0
          time.sleep(stop_seconds)

奇怪的是,大多数时候甚至都没有创建单个用户。

这就是我的gunicorn服务的样子:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=app_4
Group=www-data
WorkingDirectory=/home/app_4/backend
ExecStart=/home/app_4/backend/venv/bin/gunicorn --worker-class eventlet     --access-logfile - --workers 3 --bind unix:/home/app_4/backend/project/backend$

[Install]
WantedBy=multi-user.target

1 个答案:

答案 0 :(得分:0)

自从您尝试过gunicorn。然后,我建议调整Nginx

通过this添加您的conf

  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;