方案一 django-crontab
安装
pip install django-crontab
部署
在django项目的settings里添加如下:
1 2 3 4
| INSTALLED_APPS = ( 'django_crontab', ... )
|
创建定时任务
1 2
| def my_scheduled_job(): pass
|
配置定时任务
在django项目的settings里添加如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| CRONJOBS = [ ('*/5 * * * *', 'myapp.cron.my_scheduled_job') ]
第一个参数(表示时间): 前5个字段分别表示: • 分钟:0-59 • 小时:1-23 • 日期:1-31 • 月份:1-12 • 星期:0-6(0表示周日) 一些特殊符号: *: 表示任何时刻 ,: 表示分割 -:表示一个段,如第二端里: 1-5,就表示1到5点 /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1. 第二个参数(表示路径): 格式:app名称/文件名/函数名 如果想生成日志,那就再加一个字符串类型的参数:'>> path/name.log', path路径,name文件名。'>>'表示追加写入,'>'表示覆盖写入。 提示:如果你有多个定时任务,以逗号隔开,都放入CORJOBS中即可。
|
启动定时任务
以上都完成后,需要执行 python manage.py crontab add
将任务添加并生效
显示定时任务
python manage.py crontab show
删除定时任务
python manage.py crontab remove
优缺点:
运行和django无关,依赖的是linux的crontab定时服务,因此无法在windowns下运行。
一些问题
Django低级版本可以使用吗?
答:版本太低请安装0.6.0版本 pip install django-crontab==0.6.0
支持Windows吗?
答:不支持
使用add命令时,遇到”bad command”/“errors in cronfile”报错。
答:第一个参数错误,请仔细检查。
参考: https://pypi.org/project/django-crontab/
方案二 schedule
安装
pip install schedule
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import schedule import time
def job(): print("I'm working...")
schedule.every(10).minutes.do(job) schedule.every().hour.do(job) schedule.every().day.at("10:30").do(job) schedule.every(5).to(10).minutes.do(job) schedule.every().monday.do(job) schedule.every().wednesday.at("13:15").do(job) schedule.every().minute.at(":17").do(job)
while True: schedule.run_pending() time.sleep(1)
|
优缺点
优点:简单, 不依赖django,python都可以用
缺点: 在django环境需要另起线程
参考: https://pypi.org/project/schedule/
方案三 apscheduler (简单环境下,推荐使用)
安装
pip install apscheduler
使用
1 2 3 4
| from apscheduler.schedulers.background import BackgroundScheduler scheduler = BackgroundScheduler() scheduler.add_job(test.job, 'interval', minutes=1) scheduler.start()
|
优缺点
和schedule类似, 是schedule的加强版, 帮用户已经封装了线程,使用比schedule方便
参考: https://apscheduler.readthedocs.io/en/latest/index.html
方案四 celery
在小项目不建议用,杀鸡用牛刀。