28 - 任务队列 - Celery -定时任务

本文介绍了如何使用Celery框架创建异步任务,并通过两种方式配置定时任务:定时任务间隔和crontab表达式。同时强调了启动定时任务服务时需要启动worker的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定时任务: 不需要依赖项目启动

1. tasks.py 创建异步任务
from celery import shared_task
# 异步任务
@shared_task
def sum_even(data):
    return data


# 获取异步任务的结果
from celery.signals import task_success

@task_success.connect(sender=sum_even)  # sender=函数: 谁发送的信号
def complete(sender=None, result=None, **kwargs):  # 函数固定写法
    print(result)  # result 获取异步任务执行的结果
2. settings.py配置定时任务

两种方式:

        (1).  定时任务
from datetime import timedelta
 
CELERYBEAT_SCHEDULE = {
    'schedule-test': {
        'task': 'App02.tasks.hello_world',  # app的名字.tasks.函数名
        'schedule': timedelta(seconds=10),  # 每隔多久执行一次: 秒
        'args': ('hello world',)  # 函数的参数在这个里面传
    }
}
        (2). 计划任务时间
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    'every-ten-second-run-my_task': {
        'task': 'app01.tasks.sum_even',  # app的名字.tasks.函数名
        'schedule': crontab(minute="27", hour="17"),  # 每天17点27分执行一次
        'args': ('hello world',)  # 函数的参数在这个里面传,没有参数的话注释掉
    }
}
3. 启动
'''
我们启动定时任务服务时 也要先开启worker 

如果只开启定时服务没有开启worker服务 那么定时任务会被放入任务队列,
但是由于没有干活儿的worker 那么任务是不会被执行,
当worker服务被启动后会立刻去任务队列领任务并执行

你的任务一定要确保是可以正常执行的
'''
# 启动worker
   celery -A 主应用名(django912) worker -l info --pool=solo
 
# 启动定时任务
   celery -A  主应用名 beat -l info
4. crontab 执行时间表 
ExampleMeaning
crontab()执行每一分钟。
crontab(minute=0, hour=0)每天午夜0:00执行。
crontab(minute=0, hour='*/3')每三个小时执行一次:午夜,凌晨3点,早上6点,早上9点,中午,下午3点,下午6点,晚上9点。

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-4点,下午5-6点和晚上10点至11点之间执行。
crontab(minute=0,hour='*/2,*/3')每隔一小时执行一次,每小时一次可以整除三次。 这意味着:每小时除外:凌晨1点,凌晨5点,早上7点,上午11点,下午1点,下午5点,晚上7点,晚上11点
crontab(minute=0, hour='*/5')执行小时可被5整除。这意味着它在下午3点触发,而不是在下午5点触发(因为下午3点等于24小时时钟值“15”,可以被5整除)。
crontab(minute=0, hour='*/3,8-17')每小时可被3整除,并在办公时间(上午8点至下午5点)每小时执行一次。
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')

每年5月11日执行。

crontab(0, 0,

month_of_year='*/3')

在每个季度的第一个月每天执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值