Если вам нужно запускать функцию каждые X минут/секунд и т. д. для очистки, запуска некоторых операций, вы можете выполнить простой планировщик с помощью модуля потоковой обработки и пользовательского интерфейса django. команды.
Допустим, я хочу вызывать функцию каждые 5 секунд, чтобы публиковать что-то во внешнем API.
В вашем приложении django создайте папку/пакет с именем управление внутри этой папки, создайте еще одну папку с именем команды. В папке команд создайте модуль с именем runposter.py. В итоге у вас получится что-то вроде этой структуры yourapp/management/commands/runposter.py.
В этом коде мы используем поток, который выполняет цикл while до тех пор, пока он не останавливается каждые 5 секунд. Замените print("posting") функцией/логикой, которую вы хотите запустить.
# 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!")
Хорошо, теперь откройте другое окно терминала и запустите runposter python Manage.py. Командный постер, как вы можете видеть, был создан на основе указанного нами имени модуля.
Конечно, для чего-то более сложного я рекомендую использовать rq-scheduler, периодические задачи celery или django-q.
Но для простых случаев этого должно быть достаточно.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3