"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como criar um agendador simples no Django

Como criar um agendador simples no Django

Publicado em 2024-11-08
Navegar:779

How to create a simple scheduler in Django

Se você precisar executar uma função a cada X minutos/segundos etc. para fazer algumas limpezas, acionar algumas operações, você pode fazer um agendador simples com a ajuda do módulo threading e do Django custom cli comandos.

Digamos que eu queira invocar uma função a cada 5 segundos para postar algo em uma API externa.

Em seu aplicativo Django, crie uma pasta/pacote chamada gerenciamento dentro dessa pasta, crie outra pasta chamada comandos. Na pasta de comandos, crie um módulo chamado runposter.py. No final, você terá algo parecido com esta estrutura yourapp/management/commands/runposter.py.

Neste código, usamos um thread que executa um loop while, desde que não seja interrompido a cada 5 segundos. Substitua print("posting") pela função/lógica que você deseja executar.

# 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!")

Legal, agora abra outra janela de terminal e execute python manager.py runposter. O comando runposter, como você pode ver, foi criado a partir do nome do módulo que fornecemos.

Claro, para algo mais complexo eu recomendo usar rq-scheduler ou tarefas periódicas de aipo ou django-q.

Mas, para casos simples, isso deve ser suficiente.

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/climentea/how-to-create-a-simple-scheduler-in-django-1o54?1 Se houver alguma infração, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3