使用celery创建定时任务

使用celery创建定时任务
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说使用celery创建定时任务,希望能够帮助大家进步!!!

测试环境:
ubuntu:20.04
python:3.6
django:2.2
celery:4.4.7

创建django项目

添加celery的配置文件,目录结构如下图
在这里插入图片描述

修改配置文件

这里我使用redis作为消息中间件,任务的信息和结果返回都存储在redis中。
/proj/settings.py文件

CELERY_BROKER_URL = 'redis://localhost:6379/0' # 工人信息,以及任务信息
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'redis://localhost:6379/1' # 任务结果存储
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIME_ZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = True

/proj/celery.py文件

import os
from celery import Celery
# 获取celery在settings中的配置信息
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
# celery实例对象创建
app = Celery('proj')
# 使用配置信息,其中namespace作用为所有的celery配置都需要使用CELERY作为前缀,且最好所有字母都大写
app.config_from_object('django.conf:settings', namespace='CELERY')
# 获取所有的task,官方文档中说可以自动获取所有的task,但是我测试时需要加上task否则他会显示为注册类型
app.autodiscover_tasks(['demoapp.tasks.mul'])

# 下面的设置就是关于调度器beat的设置
app.conf.beat_schedule = {
   
    'test': {
     # 取个名字
        'task': 'demoapp.tasks.mul',  # 设置是要将哪个任务进行定时
        'schedule': crontab(hour=23, minute=59, day_of_week=[0,1,2,3,4,5,6]),  # 调用crontab进行具体时间的定义.如果想以秒为单位做定时可以'schedule': 10表示每10秒运行该任务
        'args':(2,3) # 参数
    }
}

@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')

测试代码

/demoapp/task.py

from celery import shared_task

@shared_task
def mul(x, y):
    return x * y

运行命令

在项目目录下运行此命令

celery -A proj worker -B -l info

其中-A表示创建的celery对象,-B表示启动定时,-l info日志输出等级是info
在这里插入图片描述
在这里插入图片描述
参考官方文档

定时任务crontab用法

Example Meaning
crontab() 每分钟执行.
crontab(minute=0, hour=0) 每个凌晨执行.
crontab(minute=0, hour=’*/3’) 每天的3、6、9、12、15、18、21、1、24点执行
crontab(minute=0,hour=‘0,3,6,9,12,15,18,21’) 同上.
crontab(minute=’*/15’) 每15分钟执行一次.
crontab(day_of_week=‘sunday’) 在周末没分钟执行一次.
crontab(minute=’’,hour=’’, day_of_week=‘sun’) 同上.
crontab(minute=’*/10’,hour=‘3,17,22’, day_of_week=‘thu,fri’) 在星期四和星期五的3、17、22点每10分钟执行一次.
crontab(minute=0, hour=’/2,/3’) 每天的1am, 5am, 7am, 11am, 1pm, 5pm, 7pm, 11pm执行
crontab(minute=0, hour=’*/5’) 每天5、10、15、20点执行
crontab(minute=0, hour=’*/3,8-17’) 每天9、12、15点执行
crontab(0, 0, day_of_month=‘2’) 每个月的第二天执行.
crontab(0, 0,day_of_month=‘2-30/2’) 偶数日执行.
crontab(0, 0,day_of_month=‘1-7,15-21’) 每个月的第一周和第三周执行
crontab(0, 0, day_of_month=‘11’,month_of_year=‘5’) 每年的11月5日执行.
crontab(0, 0,month_of_year=’*/3’) 3、6、9、12月执行.
本文来源it小白求知路,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/29162

发表评论