当我在 gunicorn 中为 Django 应用程序设置工作人员超时时,其他用户无法访问该应用程序

Posted

技术标签:

【中文标题】当我在 gunicorn 中为 Django 应用程序设置工作人员超时时,其他用户无法访问该应用程序【英文标题】:when i set worker time out in gunicorn for Django Application, other users are not able to access the application 【发布时间】:2022-01-21 22:15:17 【问题描述】:

我有一个在 Gunicorn 和 nginx 上运行的 django 应用程序。应用程序中有一个请求需要 10 分钟来加载页面 [有很多数据要处理],我已将 Gunicorn 的工作时间增加到 1200 秒,以使其需要足够的时间来加载页面。它工作正常,但在该请求得到处理之前,其他用户无法访问应用程序:

504 网关超时 nginx/1.21.4

这是我的码头工人

version: '3.8'

services:
  web:
    volumes:
      - static:/static
    command: python manage.py makemigrations /
    && python manage.py migrate && python manage.py collectstatic --noinput/
     && python manage.py crontab add /
     && exec gunicorn DrDNAC.wsgi:application --bind 0.0.0.0:8000 --timeout 1200"
    build:
      context: .
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:13.0-alpine
  nginx:
    build: ./nginx
    volumes:
      - static:/static
    ports:
      - "80:80"
    depends_on:
      - web

volumes:
  postgres_data:
  static:

这是 nginx:

upstream app 
    server web:8000;


server 
    listen 80;

    location / 
        proxy_pass https://app;
        proxy_connect_timeout 75s;
        proxy_read_timeout 300s;
    
    location /static/ 
        alias /static/;
    


【问题讨论】:

你能检查一下 nginx 容器是否可以将 web 名称解析为 IP 地址吗? docker exec -it nginx_container_name /bin/bash 并运行 'ping web' 如果容器中没有 ping,则必须通过 1.apt update 2.apt install iputils-ping 安装它 【参考方案1】:

这可能是因为工人数量不足。

尝试通过在 gunicorn 调用中添加 --workers=4 来增加数量。

gunicorn DrDNAC.wsgi:application --workers=4 --bind 0.0.0.0:8000 --timeout 1200

您可以在以下链接中找到更多信息: https://docs.gunicorn.org/en/stable/settings.html#worker-processes

另外你还可以通过--threads 4增加线程数

【讨论】:

成功了,谢谢。

以上是关于当我在 gunicorn 中为 Django 应用程序设置工作人员超时时,其他用户无法访问该应用程序的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在使用 Nginx 和 Gunicorn 的 Django 应用程序上得到 502 Bad Gateway?

如何运行与 gunicorn 绑定的 django 应用程序?

如何让 Django 使用 Gunicorn 提供静态文件?

尝试使用 Foreman 在 Gunicorn 上本地运行 Django 应用程序

使用 nginx gunicorn 在 digitalocean 上部署 django react

Django gunicorn Nginx 设置仅显示 404 页面