首页 新闻 会员 周边

docker 里面用 gunicorn 启动Django服务 代码加载两次

0
悬赏园豆:80 [待解决问题]

问题描述:
docker里面用gunicorn 启动Django服务 代码加载两次

用 gunicorn 启动 django 服务

/usr/local/bin/gunicorn QaPlatform.wsgi:application -c gunicorn.conf.py

下面是gunicorn.conf.py 文件的参数

workers=1 # 并行工作进程数
threads=10 # 指定每个工作者的线程数
bind=['0.0.0.0:8001'] # 监听内网端口8000
proc_name='qaServer' # 进程名称
pidfile='/tmp/qaServer.pid' # 设置进程文件目录
worker_class='gthread' # 工作模式协程
timeout=30 # 超时
max_requests=6000 # 最大请求数

`

  • 功能: Django启动服务后 启动定时任务执行逻辑
    -本地环境用runnserver 启动会有两个进程 定时任务启动两次 查询说有一个是 检测代码自动重载的进程 加 --no reload 选项,可以解决
  • 然后是gunicorn 启动服务,gunicorn 在本地启动服务 只启动一个服务进程 定时任务只有一个,没有问题
  • 部署到服务器后 gunicorn启动 每次都是有两个服务进程,定时任务也是两个,
木子七的主页 木子七 | 初学一级 | 园豆:19
提问于:2023-10-08 20:05
< >
分享
所有回答(1)
0

在您的描述中,问题似乎与Gunicorn在服务器上启动Django应用程序时出现的多个进程和重复执行定时任务有关。这可能与Gunicorn的工作方式以及Django的配置有关。

以下是一些可能有助于解决问题的建议:

  1. 检查Gunicorn配置
    • 确保您的Gunicorn配置文件(gunicorn.conf.py)没有额外的参数或配置,导致多个工作进程启动。通常情况下,只需要设置workersbind等基本配置。
  2. Gunicorn Worker 类型
    • 您在Gunicorn配置中使用了gthread作为工作模式,这可能导致线程的使用。确保您的应用程序代码和Django设置与线程兼容,不会导致多个定时任务实例。
  3. Django设置
    • 在Django应用程序的设置中,确保您没有配置多个定时任务,或者检查定时任务的注册代码以确保它只运行一次。例如,使用APScheduler时,您可以在manage.py中注册任务,确保它只在主进程中运行。
  4. Gunicorn命令行选项
    • 在启动Gunicorn时,确保您没有使用额外的选项,特别是不要使用--reload选项,因为它会导致Gunicorn在代码更改时重新加载应用程序,从而产生额外的进程。
  5. 日志和调试
    • 启用日志以检查Gunicorn和Django的行为。通过查看日志文件,您可以确定是否有多个Gunicorn工作进程和多个定时任务在运行。
  6. Gunicorn版本
    • 确保您使用的是最新版本的Gunicorn,以确保任何已知问题已得到修复。

最重要的是,检查和调试Gunicorn和Django的配置以确保它们按照您的预期运行。如果问题仍然存在,可能需要更深入的检查和调试,以查明问题的根本原因。

笑叹、 | 园豆:34 (初学一级) | 2023-10-23 14:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册