Thanks a lot Russel! It sounds like a pretty reasonable approach to me.

On Tue, Nov 1, 2011 at 7:54 PM, Russell Keith-Magee <russ...@keith-magee.com
> wrote:

> On Wed, Nov 2, 2011 at 7:37 AM, Kurtis <kurtis.mull...@gmail.com> wrote:
> > Hey,
> >
> > I've got a part of my site that is just prototyped at the moment. It's
> > not particularly optimized since it's still in the works.
> >
> > I don't think it's going to take a considerable amount of time to load
> > while we have few users. But, when we start migrating our old users to
> > the new system, I can imagine there will be a delay before the
> > calculations are finished and the data is ready to display.
> >
> > Unfortunately, this is real-time calculations so it's not a simple
> > matter of caching it to death. I'm not ready to do any major
> > optimization at this point anyways since it's still a work-in-
> > progress.
> >
> > Anyways, I want to display a "loading" page while the data is
> > prepared. I don't mind if it's a matter of a redirect, done using
> > AJAX, or just using some sort of a Javascript technique that will
> > display the "Loading" dialog while the rest of the data is sent to the
> > browser. What are some suggestions on doing this with Django? I prefer
> > a simple, straight-forward method that won't cause a lot of
> > complication with the existing code base if at all possible.
>
> There's a very common pattern for this kind of activity:
>
>  1) User requests /start page to get some data that is expensive to
> calculate
>
>  2) View for /start creates a Task object that represents the work to
> be executed in the background.
>
>  3) An external process is running, waiting for new Task objects to be
> created. Exactly how this is serviced is up to you, but the important
> part is that the expensive calculation isn't performed in the view
> code -- it's handled by a process external to the web server. Celery
> is a common way to handle this sort of task; you can also knock
> something together quickly with a script running under a cron (run
> once per minute, find all new tasks, process each, then quit. Not
> ideal for production, but it works as a proof of concept).
>
>  4) Once the task has been *created* (Not finished -- just created),
> /start redirects to a /loading page.
>
>  5) /loading contains an ajax lookup that polls the completion status
> of the task
>
>  6) The task executes and completes; on completion, the task is marked
> as "complete".
>
>  7) Once the task is complete, /loading reports the completion, and
> redirects to /finished to display the results of the calculation.
>
> At every step, the web server's interaction is short lived -- create a
> task; check if the task is complete; display the result of the task --
> so it scales well. If you're careful about the design of your task
> processor, you can make sure that this processor scales too; e.g., add
> a second Celery processor for the task, and you've just doubled your
> capacity.
>
> Hope this helps!
>
> Yours,
> Russ Magee %-)
>
> --
> 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
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
>

-- 
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 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to