【问题标题】:Run startup code when wsgi worker thread restartswsgi 工作线程重新启动时运行启动代码
【发布时间】:2020-08-22 11:29:29
【问题描述】:

我有一个使用 gunicorn 运行 wsgi 应用程序的 django 项目。啊,对我这种 python 新手来说太过分了。

我有一个在应用程序启动时运行的以下 gunicorn 命令。

exec ./env/bin/gunicorn $wsgi:application \
    --config djanqloud/gunicorn-prometheus-config.py \
    --name "djanqloud" \
    --workers 3 \
    --timeout 60 \
    --user=defaultuser --group=nogroup \
    --log-level=debug \
    --bind=0.0.0.0:8002

下面是我的 wsgi.py 文件:

import os
from django.core.wsgi import get_wsgi_application

os.environ['DJANGO_SETTINGS_MODULE'] = 'djanqloud.settings'
application = get_wsgi_application()

从 docker 容器中的“ps- -eaf”命令显示的 gunicorn 命令:

/opt/gq-console/env/bin/python2 /opt/gq-console/env/bin/gunicorn wsgi:application --config /opt/gq-console//gunicorn-prometheus-config.py --name djanqloud --workers 3 --timeout 60 --user=gq-console --group=nogroup --log-level=debug --bind=0.0.0.0:8002

它们是我在 django 项目中创建的一个简单线程,当上面的工作线程被杀死时,它会被杀死。

我的问题是:

当上述工作线程自动重新启动时,我可以在哪里再次创建我的线程?

我试图覆盖 wsgi.py 文件中的 get_wsgi_application() 函数,但在引导工作线程时出现以下错误:

AppImportError: Failed to find application object: 'application'.

我是 python django 和 wsgi 应用程序的新手,所以请尝试详细说明你的答案。

基本上,我正在寻找一个可以保存我的启动代码的位置,该代码在 wsgi 工作线程被杀死并自动启动时运行。 谢谢。

【问题讨论】:

    标签: python django gunicorn wsgi django-wsgi


    【解决方案1】:

    要在服务器启动后自动启动您的应用程序,或者在 gunicorn 工作人员被杀时自动重新启动您的应用程序,请使用进程控制系统,例如主管。这将负责自动重新启动您的 gunicorn 进程。

    【讨论】:

    • 在我的情况下,工作线程正在自动重新启动。我所需要的只是我可以放置我的代码的地方,这样当工作线程重新启动时,我的代码也会被执行。我曾尝试覆盖 get_wsgi_application() 但未能这样做。
    猜你喜欢
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多