当我在 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 应用程序