我想在Django服务器启动时执行一些代码,但我希望它只运行一次.目前,当我启动服务器时,它执行了两次.文档说这可能发生,并且:
您应该在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")
Run Code Online (Sandbox Code Playgroud) 目标。启动 django 框架时,也会启动其他依赖 django 对象的 PY 脚本。从配置文件中获取服务器和端口号。
问题:Popen 似乎运行了两次,我不知道为什么?
#!/usr/bin/env python
import os
import sys
import subprocess
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test.localsettings")
from django.core.management import execute_from_command_line
def getargs():
try:
f = open("config")
data = []
for line in f:
data.append(line)
f.close()
server = data[0].rstrip()
port = data[1]
newargs = ['lmanage.py', 'runserver', server + ':' + port]
return newargs
except Exception as e:
print e
pass
if __name__ == "__main__":
#Launching Checker
try:
checker = subprocess.Popen([sys.executable, os.path.join(os.getcwd() + "checker.py")], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print checker.pid …Run Code Online (Sandbox Code Playgroud)