Friday, August 1, 2014

Re: How to call a function when a project starts.


As others have pointed out, the reason putting it in settings.py causes it to be run twice is because settings is loaded twice when you use runserver. That won't happen in production, however, as the mod_wsgi binding doesn't require the "other" process when it's deployed through the wsgi interface.

I would **STRONGLY** recommend against the hacks suggested in this thread that involve building singleton objects, file-based locks, or other mechanisms that work around the fact that settings.py is invoked twice.

If you're using Django 1.6, the best option is to put the code in your top level urls.py. This is what admin does to discover all the apps in a Django system. It's not an ideal solution, but it works, and will only be executed once, and as close to "startup" as is practical.

If you're using a pre-release of Django 1.7, the new AppConfig class definitions are designed to provide the exact sort of 'startup configuration' you've asked about.


Yours,
Russ Magee %-)



On Thu, Jul 31, 2014 at 3:57 AM, Chen Xu <xuchen81@gmail.com> wrote:
Hi Everyone:
I would like to call a function when my project starts, basically I want to call a do_something() when I run python manage.py runserver. However, when I put it into settings.py, it gets called twice, but I only want it to execute once.

Is there a good way to do it.

Thanks


--
⚡ Chen Xu

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CACac-qbTXbMGmYU%3D5R618rbt7pT%3DgTL%3DWAxhCR-prmuLbz-VKw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAJxq84-bu-OPNtsfF_En-RxHc-5-opzNH9YUe-DMuTfMykJR9w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment