Планировщик Cron в Django
Я использую планировщик в Django/Windows IIS from apscheduler.schedulers.background import BackgroundScheduler для запуска моего фонового скрипта. Проблема в том, что taks запускается несколько раз. Если я запускаю ту же программу на своем компьютере, она запускается только один раз, но когда я загружаю ее на сервер windows (на котором размещено мое приложение Django), она запускается несколько раз. Сначала 1 раз, потом 2, потом 10, потом снова 2.
scheduler.add_job(cron_mail_overdue, "cron", hour=7, minute=14, day_of_week='mon-sun', id="task002", replace_existing=True)
Для теста я поставил
scheduler.add_job(cron_mail_overdue, "interval", minutes=1, id="task002",replace_existing=True)
Это то же самое, я сделал это просто для проверки. Он делает то же самое независимо от того, какую задачу я запускаю. Почему она запускается несколько раз? И почему не всегда одно и то же число? Сначала 1 раз, потом 10. Такс посылает электронную почту, и я получаю 10 писем, полученных одновременно.
Я бы предложил создать еще один url с представлением для этой задачи. Теперь на этом url мы можем вызвать этот url для планирования наших задач. Это будет бесконечный цикл, поэтому наша задача будет планироваться через каждый указанный нами интервал времени (здесь 50 секунд).
Мы можем запустить это, перейдя по нашему url, и тогда он автоматически войдет в цикл бесконечного цикла.
Теперь вы можете добавить этот код в ваше представление:
import time
def sendMail(request):
while True: # Infinite loop
YourTaskFunction or your task()
time.sleep(50) # Wait 50s before re-entering the cycle
# change the time as per your requirements
return render(request, 'index.html', {})