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.
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