Vishal Rana wrote:
Hi,
A module level dictionary 'd' and is accessed by different threads/requests
in a django web application. I need to update 'd' every minute with a new
data and the process takes about 5 seconds.
What could be best solution where I want the users to get either the old
value or the new and nothing in between.
I can think of a solution where a temp dictionary is constructed with a new
data and assigned to 'd' but now sure how this works!
Appreciate your ideas.
Thanks
The other answers I've seen so far are correct, as far as they go.
Creating a new dictionary, and only binding it to the 'd' name after
it's complete is the best you can do.
However, it'd be easy for one of those threads to abuse the situation.
If they keep their own reference to data from d, and go back to d for
more information, then they could be using stale and new data,
respectively, in the same thread.
So in addition to making sure you build the entire dictionary before
assigning it to d, you have to make sure all users of d make their own
name for it, only referencing the global 'd' once per thread. There are
other ways, but this is the simplest to describe. Realize that if you
have a long-running thread (say 15 minutes), then it'd continue using
the version of d that existed when it started. This shouldn't be a
problem for a typical web app, however, because the user could get very
impatient waiting for his update.
DaveA
--
http://mail.python.org/mailman/listinfo/python-list