Thursday, October 23, 2014

Re: is it possible to detect the end of the django app?

HI Michael,

There's a problem here - Web apps don't have a lifecycle like this. The only part of the app lifecycle that can be relied upon is the request-response cycle - someone makes a response, which will eventually be returned as a response. Outside of that internal lifecycle, not much can be guaranteed. A process will have to start in order to service a request (and there are ways to hook into that), but there are no guarantees that this process will last for 1 request, 10 or 10000. And there isn't a coordinated shutdown of the web process - the web server may choose to shut down a web worker at any time.

If you're using a queue to perform some sort of external processing, then that queue should be stored *outside* the web app itself. This means using a message queue (like RabbitMQ), or a service that provides an analogous interface (like RQ, layered over Redis). That way, a short lived web request can push something onto the queue, and then exit immediately. The web request doesn't need to worry about the lifecycle of the queue - it just uses the queue as a service.

In short - you need to stop thinking of the web server as a "program" with a startup, shutdown, and predictable lifecycle, and move to thinking about it as "a function floating in space that can be invoked" - because, in practice, that's what it is. If you've got anything long lived, it needs to live outside the web process.

Yours,
Russ Magee %-)

On Fri, Oct 24, 2014 at 5:18 AM, Michael <michael.palumbo87@gmail.com> wrote:
Hi,

How to detect that the django app is stopping?

I use some librairies that use a queue (queue.Queue) to store the data that will be sent in batch.
They provide a flush method to flush at the end of the program to make sure there's nothing left in the queue.

But where could I call the flush method in django? 

Thanks

--
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/ddecba43-49b3-493c-ad35-83d02758f95f%40googlegroups.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/CAJxq848W3m_OkRU9v29bN_AfX%3DoE_0qoh79zv_17sjQ2CSyUPg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment