Si necesita ejecutar una función cada X minutos/segundos, etc. para realizar algunas limpiezas, activar algunas operaciones, puede realizar un programador simple con la ayuda del módulo de subprocesos y el cli personalizado de Django. comandos.
Digamos que quiero invocar una función cada 5 segundos para publicar algo en una API externa.
En su aplicación Django, cree una carpeta/paquete llamado administración dentro de esa carpeta, cree otra carpeta llamada comandos. En la carpeta de comandos, cree un módulo llamado runposter.py. Al final tendrás algo como esta estructura yourapp/management/commands/runposter.py.
En este código utilizamos un hilo que ejecuta un bucle while siempre que no se detenga cada 5 segundos. Reemplace print("posting") con la función/lógica que desea ejecutar.
# 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!")
Bien, ahora abre otra ventana de terminal y ejecuta python enable.py runposter. El comando runposter, como puede ver, se creó a partir del nombre del módulo que le proporcionamos.
Por supuesto, para algo más complejo recomiendo usar rq-scheduler o celery periodic task o django-q.
Pero, para casos simples, esto debería ser suficiente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3