On Nov 3, 2:03 am, belred <[EMAIL PROTECTED]> wrote:
> On Nov 2, 3:29 am, Steve Holden <[EMAIL PROTECTED]> wrote:
>
>
>
> > belred wrote:
> > > i have an wget event in a cron job. the view does some processing
> > > which involves calling external websites and databases (takes about 25
> > > seconds) and updates some module level dictionary lookup variables
> > > (about 7 MB of data) which the rest of the program reads. but
> > > unfortunately, only the one apache child process seems to be updated,
> > > not all the others. how can i share this module level variable across
> > > processes? this lookup happens multiple times per request. but the
> > > internal data gets updated nightly.
>
> > Aah, so this is the real question! I don't believe Django signals are
> > intended to serve needs like this. How does "the rest of the program"
> > read the module-level dictionary items? The more explicit you are about
> > the exact communication mechanism involved the more likely it is someone
> > (probably not me) will be able to help.
>
> > regards
> > Steve
>
> thanks steve,
>
> you comments about signals were very clear and should be in the
> documentation.
>
> when i receive the nightly wget request to update the data, it's
> stored in module level dicts which other parts of the program use by
> simply importing the data module.
>
> import data
>
> def view_func(request):
> foo = data.lookup['foo']
> ...
>
> def view_update_data(request):
> data.lookup = retrieve_new_data()
> ...
>
> this works correctly for the child process that receives the update,
> but the other child process don't seem to be getting the updates.
>
> i thought after i did an update i could os.uptime() thewsgifile
> which would cause all of my django project to restart, but it doesn't
> seem to be updating my data either.
If the module level data you are talking about are just transient
global variables in the module, then other processes can't see them
(or other sub interpreters in same process). For a start read:
http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
Written for mod_wsgi, but equally applicable to mod_python for
embedded mode description at least. Take note of very last section
where it summarises data sharing issues.
If it is module level data, only solution would be to use mod_wsgi
daemon mode and delegate Django instance to run in single process.
In respect of triggering a restart, if the data is indeed transient,
ie., in memory only, how does it get read on startup if you are
relying on cron job to trigger its initialisation?
Graham
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---