Отложенная рассылка уведомлений: как в Django ежеминутно проверять, пора ли выполнять скрипт?
Celery - очень правильный подход
но иногда хватает и обычного крона
использоват huey/celery/rqworker
при том huey очень простой