I want to execute some code at startup of Django server but I want it to run only once. Currently when I start the server it's executed twice. Documentation says that this might happen and:
you should put a flag on your AppConfig classes to prevent re-running code which should be executed exactly one time.
Any idea how to achieve this? Print statement below is still executed twice.
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")
When you use python manage.py runserver
Django start two processes, one for the actual development server and other to reload your application when the code change.
You can also start the server without the reload option, and you will see only one process running will only be executed once :
python manage.py runserver --noreload
You can see this link, it resolves the ready()
method running twice in Django
if you don't want to use --noreload
you can:
replace the line in your app's __init__.py
that you use to specify the config:
default_app_config = 'mydjangoapp.apps.MydjangoappConfig'
by this:
import os if os.environ.get('RUN_MAIN', None) != 'true': default_app_config = 'mydjangoapp.apps.MydjangoappConfig'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With