Trigger actions independently of url request

82 views
Skip to first unread message

Charley Paulus

unread,
Oct 22, 2018, 12:29:19 PM10/22/18
to Django users
Hi,

After reading the Django tutorial, my understanding (I hope I’m wrong) is that the only way to trigger a function of a Django app is when someone on the client side request the url related to that function.

But what if I want the server to run a function indenpendently of a url call, for example:
- every 10 minutes
- when a pre-defined combination of variables become true

Where should such code live?

Thank you.
Best regards,
Charley

Andrew Pinkham

unread,
Oct 22, 2018, 1:10:52 PM10/22/18
to django...@googlegroups.com
On Oct 22, 2018, at 12:08, Charley Paulus <charley...@gmail.com> wrote:
> After reading the Django tutorial, my understanding (I hope I’m wrong) is that the only way to trigger a function of a Django app is when someone on the client side request the url related to that function.

That is correct. A view function/object is only called when a site visitor is routed to that callable by the URL configuration.

> But what if I want the server to run a function indenpendently of a url call, for example:
> - every 10 minutes
> - when a pre-defined combination of variables become true

I'm not clear on your second condition, but you are probably interested in Celery for the first.

http://www.celeryproject.org/

Alternatively, some clouds provide the ability to run code on a regular basis. If your Django code is not closely coupled with cron job, you could use AWS Lambda.

https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html

If it is tightly coupled and Celery is too powerful for your needs, you could use an AWS Lambda (or Azure Function, etc) to send a request to your Django API on a regular basis.

Andrew
https://jambonsw.com
https://django-unleashed.com

Charley Paulus

unread,
Oct 22, 2018, 4:11:09 PM10/22/18
to Django users
Hi Andrew,

Thank you for your answer.

To better clarify my need, here is one use case:
1) I would like my server (where Django is) to ping a remote address (let's say google.com) every 10 minutes, and put the result (communication ok or not) in a Django-generated database.
2) Then I will have a Django view that displays some statistics based on this database records. No worries for this point. My question is strictly on point 1.

So what I need is my server itself to run code on a regular basis.
Can I simply start a thread in manage.py, like here: https://eldarion.com/blog/2013/02/14/entry-point-hook-django-projects/ ?

It seems that Celery and AWS Lambda are external tools that can remotely call my Django API.

I hope the example helps.

Thanks again.

Best regards,
Charley

Ryan Nowakowski

unread,
Oct 26, 2018, 10:00:01 PM10/26/18
to django...@googlegroups.com
Celery is probably what you want. It allows you to run scheduled tasks. Alternatively, you can create a custom management command and run that periodically some other way: Cron, etc.

Joel

unread,
Oct 26, 2018, 10:23:15 PM10/26/18
to django...@googlegroups.com
There's nothing that prevents you from doing the necessary imports of your django model and other required modules in a python script, and then have it run by cron. Is there? 

I've operated python scripts outside of the django application, just to import certain files into the database, which needs to be done only on the server side, infrequently. This seems just like this, except it needs to be done frequently. The linux cron does this very well.

--
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...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/73e3ded5-45be-4185-95e5-968ef803c75b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Charley Paulus

unread,
Oct 27, 2018, 9:09:12 AM10/27/18
to django...@googlegroups.com
Hi Joel,

Thanks for sharing your experience. That’s perfect. This way I can make use of my Django models in the script called by cron.

Best regards,

Charley Paulus
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/jyDsSmwc1Lk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users...@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

Mario R. Osorio

unread,
Oct 29, 2018, 9:08:18 AM10/29/18
to Django users
I'm far from being an expert but I think yours is a rather simple operation that needs to be executed every n minutes.

I think that in the case you're explaining, Celery is an overkill. Why not go with a cron job?
You might want to create a combination of bash and python scripts to do exactly what you need but you'll have a whole lot less headaches.
Reply all
Reply to author
Forward
0 new messages