django中celery的定时任务使用
作者:Li- Li
这篇文章主要介绍了django中celery的定时任务使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
话不多说言归正传
1.celery 的介绍
1.1celery的基本介绍
celery是基于python实现的一个异步任务的调用工具,同时还是一个任务队列,主要用于处理耗时的任务。
celery也被称为芹菜。
celery架构由三个模块组成:消息中间件,任务执行单元和任务执行结果储存 组成。
其实那在刚接触的时候小编的理解是 :
老板把地皮交给包工头去干 让包工头把房子建好 然后包工头找了工人 把任务分配给工人让工人去干 最后工人盖好房子老板验收(这是小编自己的理解也就适合入门)
1.2什么是celery beat
celery支持定时任务,设定好任务的执行时间,
celery就会定时自动帮你执行, 这个定时任务模块叫celery beat
2.celery定时任务的配置
__init__.py
里面主要是celery初始化配置
from datetime import timedelta from celery import Celery import os import django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "自己的项目名.settings") django.setup() celery_app = Celery('mycelery') #读取celery 的配置 celery_app.config_from_object('celery_task.config') # 定时任务 # 文件夹名.文件名 celery_app.autodiscover_tasks(['celery_task.times']) celery_app.conf.update( CELERYBEAT_SCHEDULE={ 'sum-task': { # 文件夹名.文件名.方法名 'task': 'celery_task.times.my_con', # 多少秒执行一次(eg:5秒一执行) 'schedule': timedelta(seconds=5), # 这是传入my_con方法中的参数 'args': (5, 6) }, 'sum-task1': { 'task': 'celery_task.times.my_print', 'schedule': timedelta(seconds=3), 'args': () }, } )
config.py
""" celery 配置 """ 消息中间件 broker BROKER_URL = 'redis://xx.xx.xx.xx:6379/11' 任务结果存储 results backend CELERY_RESULT_BACKEND = 'redis://xx.xx.xx.xx:6379/12' # 时区 CELERY_TIMEZONE = 'Asia/Shanghai' # 导入指定的任务模块 CELERY_IMPORTS = ( 'celery_task.tasks' )
task.py 里面写的是异步任务就不展示了
times.py
里面写的是定时任务
# 定时任务 import time from celery_task import celery_app @celery_app.task() def my_con(x,y): print(x,y) print('x和y相加') return x+y @celery_app.task() def my_print(): print('22222222')
3.celery 启动命令
异步任务的启动命令:celery -A 任务名 worker -l info -P eventlet
定时任务的启动命令:celery -A 任务名 beat -l info
注意:要先启动异步任务,在启动定时任务
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。