【发布时间】:2016-02-22 05:29:04
【问题描述】:
我想在 Django 服务器启动时执行一些代码,但我希望它只运行一次。目前,当我启动服务器时,它执行了两次。 Documentation 表示这可能会发生,并且:
您应该在 AppConfig 类上放置一个标志以防止重新运行 应该只执行一次的代码。
知道如何实现这一目标吗?下面的打印语句仍然执行了两次。
from django.apps import AppConfig
import app.mqtt
from apscheduler.schedulers.background import BackgroundScheduler
class MyAppConfig(AppConfig):
name = 'app'
verbose_name = "HomeIoT"
run_already = False
def ready(self):
if MyAppConfig.run_already: return
MyAppConfig.run_already = True
print("Hello")
【问题讨论】:
-
缩进正确吗?
ready应该在 MyAppConfig 类中。 -
你是对的。这只是复制/粘贴错误。我修好了。
-
如果使用
--noreload运行,是否会发生双重打印? -
不错。谢谢!用
--noreload启动服务器实际上解决了这个问题。但是,即使没有这个,是否可以避免多次运行 ready() ?我的理解是,运行任何 manage.py 命令时,ready() 仍然会被执行。 -
如果你不使用
runserver- 就像在生产中...... - 它不起作用。 --noreload 做了什么来实现这一点?