Python 使用Django和Gunicorn在父级中运行启动代码

Python 使用Django和Gunicorn在父级中运行启动代码,python,django,hook,startup,gunicorn,Python,Django,Hook,Startup,Gunicorn,在Django开始侦听传入连接之前,我需要在Django应用程序启动时运行代码。在第一个HTTP请求上运行我的代码还不够好。当我使用Gunicorn时,我的代码必须在父进程中运行,然后才能分叉 在Django 1.4.2中似乎不起作用:在收到第一个请求之前,它不会运行中间件的\uuuu init\uuuu方法。向url.py添加代码的步骤同上 快速的谷歌搜索并没有发现任何有用的东西。我自己也遇到了这个问题,解决方案基本上是链接命令以保证执行和正确的顺序: systemd、supervisord或

在Django开始侦听传入连接之前,我需要在Django应用程序启动时运行代码。在第一个HTTP请求上运行我的代码还不够好。当我使用Gunicorn时,我的代码必须在父进程中运行,然后才能分叉

在Django 1.4.2中似乎不起作用:在收到第一个请求之前,它不会运行中间件的
\uuuu init\uuuu
方法。向
url.py添加代码的步骤同上


快速的谷歌搜索并没有发现任何有用的东西。

我自己也遇到了这个问题,解决方案基本上是链接命令以保证执行和正确的顺序:

systemd、supervisord或任何其他此类系统启动的脚本:

#!/bin/sh
python manage.py my_custom_command && gunicorn project.wsgi $@
创建您自己的自定义django命令,然后开始。如果在命令中禁用健全性检查,则可以获得一些加速


为了使事情更加通用,您可以创建一个“引导”信号,将任意函数连接到该信号,然后从该自定义命令发出信号。

这是一个旧命令,但在Gunicorn版本19.0及更高版本中,您可以创建一个用于运行应用程序的命令,并在其中包含所需的启动代码。以下是使用django应用程序的示例脚本:

#/usr/bin/env python
"""
使用WSGI应用程序运行Gunicorn的脚本
"""
导入多处理
从gunicorn.app.base导入BaseApplication
从myapp.wsgi导入应用程序#必须首先导入
类标准应用程序(基本应用程序):
“”“我们的Gunicorn应用程序。”“”
定义初始化(self,app,options=None):
self.options=选项或{}
self.application=app
super()。\uuuu init\uuuuu()
def加载_配置(自身):
配置={
key:key的值,self.options.items()中的值
如果输入self.cfg.settings且值不是None
}
对于键,config.items()中的值:
self.cfg.set(key.lower(),value)
def加载(自):
返回自我申请
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
gunicorn_选项={
“绑定”:“0.0.0.0:8080”,
“workers”:(multiprocessing.cpu_count()*2)+1,
}
#你的启动代码在这里
标准应用程序(应用程序、gunicorn_选项)。运行()

Django站点中是否有您需要运行的东西,或者您是否正在分叉守护进程或其他东西?分叉守护进程是危险的-您可以这样创建nephilim:/I想在站点上线之前运行一些快速检查。我不会生成任何守护进程。感谢您提及此解决方法。但是,我不能接受这个答案,因为
python manage.py
环境可能与
gunicorn project.wsgi
环境有很大的不同,我想在后者中运行我的检查。