方法1:django-crontab
定时任务crontab任务的创建
pip install django-crontab # 安装依赖
'django_crontab' # 注册中间件
定时时间的基本格式:
* * * * *
分 时 日 月 周 命令
M: minute 每分钟 用 * 或者 */1
H: hour
D: day
m: month
d: 一星期内的天
主要分为三部分应用定时: 任务时间、任务方法、任务日志
配置定时任务
# django-crontab CRONJOBS = [ # 每1分钟执行一次crontab_test函数 ('*/1 * * * * ','app.view.crontab_test','>>'+os.path.join(BASE_DIR,'test.log')) ]
若出现非英文问题:
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8' # 解决中文问题
常用命令
创建任务命令 python manage.py crontab add 展示任务命令 python manage.py crontab show 取消任务命令 python manage.py crontab remove
方法2:celery
python
# tasks
from celery_task import send_email
from datetime import datetime
ctime = datetime.now()
# 默认用utc时间
utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
from datetime import timedelta
time_delay = timedelta(seconds=10) # 当时时间10s后执行任务
# setting
cel.conf.beat_schedule = {
# 名字随意命名
'xxx': {
# 执行定时函数
'task': 'celery_tasks.task01.send_email',
# 定时每月10-15号,周一至周五,早上8点30分发送邮件
"schedule": crontab(minute='30', hour='8', day_of_week='1-5', day_of_month='10-15')
'schedule': timedelta(seconds=6), # 每6s执行一次
# 传递参数
'args': ('xxx',)
},
}
celery 启动命令
周期性执行任务单元,要注意先启动beat进程而后执行worker单元
celery -A celery_tasks beat
celery -A celery_tasks worker -l info -P eventlet
注意: 当打开beat后而若没有打开worker执行单元会导致beat进程不断向数据库中加入数据