gpt4 book ai didi

django - 重新定义AppConfig.ready()

转载 作者:行者123 更新时间:2023-12-04 16:58:53 25 4
gpt4 key购买 nike

Django 1.9。

试图学习信号。在AppConfig.ready()的文档中,据说“子类可以重写此方法以执行初始化任务,例如注册信号。” (https://docs.djangoproject.com/en/1.9/ref/applications/#django.apps.AppConfig.ready)。

some_app/apps.py

class SomeAppConfig(AppConfig):
name = 'some_app'

def ready(self):
print("Redefined ready method in some_app")

demo_signals/settings.py
INSTALLED_APPS = [
...
"some_app.apps.SomeAppConfig",
]

python manage.py runserver
Redefined ready method in some_app
Redefined ready method in some_app
Performing system checks...

System check identified no issues (0 silenced).
May 25, 2016 - 15:15:58
Django version 1.9.6, using settings 'demo_signals.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

请注意,“在some_app中重新定义就绪方法”将打印两次。

您能帮我理解为什么它被两次调用的原因吗?这不是我的错误,为什么注册信号需要两个电话?

最佳答案

当您使用python manage.py runserver Django时,启动两个进程,一个进程用于实际的开发服务器,另一个进程在代码更改时重新加载您的应用程序

您可以在os类中导入AppConfig并对其进行测试,并在ready函数中打印进程ID,如下所示:

import os

class SomeAppConfig(AppConfig):
name = 'some_app'

def ready(self):
print(os.getpid())

您将看到它打印了两个不同的过程

您也可以在不使用reload选项的情况下启动服务器,并且只会看到一个进程正在运行(您的代码 print("Redefined ready method in some_app")将仅执行一次):
python manage.py runserver --noreload

关于django - 重新定义AppConfig.ready(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com