myapp/__init__.py和def ready(self)执行时机
下面分别介绍 myapp/__init__.py 和 ready 方法的执行时机:
myapp/__init__.py 的执行时机
在 Python 里,__init__.py 文件用于把一个目录标记成 Python 包。在 Django 项目中,当导入该应用包时,__init__.py 文件就会被执行。
详细说明
- 当 Django 启动并加载应用时,会对每个应用的
__init__.py文件进行导入操作。这意味着在 Django 项目启动过程中,myapp/__init__.py文件会在早期被执行。 - 要是
__init__.py文件里有全局变量或者函数调用,这些代码会在应用被导入时运行。例如:
# myapp/__init__.py
print("Initializing myapp...")
当 Django 启动并导入 myapp 时,就会输出 Initializing myapp...。
ready 方法的执行时机
在 Django 里,ready 方法是 AppConfig 类的一个方法,其作用是在应用完成初始化之后执行一些额外的初始化操作。
详细说明
- 位置:
ready方法一般定义在应用的apps.py文件中的AppConfig子类里。例如:
# myapp/apps.py
from django.apps import AppConfig
from .queue_consumer import start_queue_listener
class MyAppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'myapp'
def ready(self):
start_queue_listener('my_queue')
- 执行时机:
ready方法会在 Django 完成所有应用的导入和配置之后执行。具体而言,当 Django 启动时,它会按以下步骤执行:- 加载 Django 设置。
- 导入所有已安装的应用。
- 对每个应用的
AppConfig类进行实例化。 - 调用每个
AppConfig实例的ready方法。
所以,start_queue_listener('my_queue') 会在 Django 完成所有应用的初始化之后执行,此时可以确保所有依赖项都已准备就绪。
综上所述,myapp/__init__.py 在应用被导入时执行,而 ready 方法在 Django 完成所有应用的初始化之后执行。

浙公网安备 33010602011771号