How to create a simple scheduler in Django

DDD
Release: 2024-10-20 16:16:02
Original
588 people have browsed it

How to create a simple scheduler in Django

If you need to run a function every X minutes/seconds etc. to do some cleanups, trigger some operations you can do a simple scheduler with the help of threading module and django custom cli commands.

Let's say I want to invoke a function every 5 seconds to post something on an external API.

In your django app create a folder/package named management inside that folder create another folder named commands. In the commands folder create a module named runposter.py. In the end you'll have something like this structure yourapp/management/commands/runposter.py.

In this code we use a thread which runs a while loop as long as it's not stopped every 5 seconds. Replace print("posting") with the function/logic you want to run.

# runposter.py
import time
from threading import Thread, Event
from django.conf import settings
from django.core.management.base import BaseCommand


stop_event = Event()


def my_job():
    while not stop_event.is_set():
        try:
            print("posting")
            time.sleep(5)
        except KeyboardInterrupt:
            break


class Command(BaseCommand):
    help = "Run Poster."

    def handle(self, *args, **options):

        poster = Thread(target=my_job)

        try:
            print("Starting poster...")
            poster.start()
            while poster.is_alive():
                poster.join(timeout=1)
        except KeyboardInterrupt:
            print("Stopping poster...")
            stop_event.set()
            poster.join()
            print("Poster shut down successfully!")

Copy after login

Nice, now open another terminal window and run python manage.py runposter. Command runposter as you can see was created from the module name we've given.

Of course, for something more complex I recommend using rq-scheduler or celery periodic tasks or django-q.

But, for simple cases this should be good enough.

The above is the detailed content of How to create a simple scheduler in Django. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!