web应用中常常会有定时处理某项任务的需求,flask框架比较灵活,简单的需求中可以低耦合的使用APScheduler,复杂的需求也很容易集成进celery。但是在django中,定制起来就比较麻烦,django现有较为成熟的定时任务组建django-crontab和django-celery。前者基于crontab,后者基于celery。
先说说较为简单的crontab。
pip install django-crontab
setting.py
INSTALLED_APPS = [
...
'django_crontab',
]
CRONJOBS = [
('* * * * *', 'django.core.management.call_command',
['task'], {}, ">> task.log"),
] # 与crontab定时器规则一样, []中写入任务名称,{}中可传入参数
这里使用了自定义的manage指令,本片中不做深入说明。也可以替换为要运行的py代码,写清楚详细路径即可。
现在就可以将任务添加进系统的crontab中了
python manage.py crontab add
收到下面的提示就算提交成功了,也可以通过 crontab -l查看当前有效的定时任务
bash -cl "/bin/python /home/hsm/Dropbox/Python2/project/manage.py crontab add /home/hsm/Dropbox/Python2/project"
adding cronjob: (5137385ee17caca44bc53c1bef979825) -> ('* * * * *', 'django.core.management.call_command', ['task'], {}, '>> task.log')
要删除crontab,可执行
python manage.py crontab remove