Работа по управлению расширениями Django
Я пытаюсь реализовать задание управления расширением django. Я хотел бы знать, как я могу запустить задание внутри django, чтобы запускать код ежедневно и указать точное время, например, 4:00 утра в задании управления расширением django. пока что код приведен ниже:
from django_extensions.management.jobs import DailyJob
class Job(DailyJob):
help = "Send notification On Instruction Instances"
def execute(self):
print("job executed at 4:00 Am")
Большое спасибо
Django не обрабатывает тайминг, это делает кронтаб.
Пока вы согласны с тем, чтобы все ежедневные задания выполнялись в 4 утра, вы можете просто обновить свой кронтаб, чтобы использовать это. В docs показано:
@daily /path/to/my/project/manage.py runjobs daily
И эти документы показывают, что @daily
эквивалентен 0 0 * * *
.
Так что просто измените свой crontab на:
0 4 * * * /path/to/my/project/manage.py runjobs daily
В их исходном коде также показано, что существует команда runjob
, которая может принимать имя задания. Таким образом, чтобы запустить только эту работу в 4 утра, вы бы использовали:
0 4 * * * /path/to/my/project/manage.py runjob my_job
Однако, эта работа должна не быть DailyJob, так как она будет выполняться дважды (один раз ежедневно от runjobs daily
, один раз в 4 утра от runjob myjob
). Я думаю, чтобы сделать это, вы просто наследуете от BaseJob
вместо:
class Job(BaseJob):
help = "Send notification On Instruction Instances"
Но я не уверен на 100%, где это должно быть в вашем коде. Возможно, я бы начал с попытки добавить его непосредственно в каталог jobs/
.
Первый ответ правильный, но чтобы добавить еще несколько вариантов для вас, есть пакеты django, которые обрабатывают фоновые задачи и планирование довольно хорошо, начиная от простых вещей, которые просто запускают задачу, когда вы хотите, до сложных решений, таких как celery.
Загляните на https://djangopackages.org/grids/g/workers-queues-tasks/ для получения полного списка пакетов, которые могут вам пригодиться.