Django使用Celery异步

本文介绍了如何在Python项目中安装和配置Celery,包括创建celery实例、加载配置文件、自动注册任务、任务调度以及在视图函数中调用异步任务。重点在于安装步骤和配置celery_worker启动命令。

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

安装包
pip install celery

pip install eventlet 
1.在项目文件的根目录下创建目录结果

2. 在main.py文件中
# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# Author     :skyTree
# version    :python 3.11
# Description:celery 主文件
"""

from celery import Celery

# 1,创建celery实例对象
celery_app = Celery('meiduo')

# 2,加载配置文件
celery_app.config_from_object('celery_tasks.config')

# 3,自动注册异步任务
celery_app.autodiscover_tasks(['celery_tasks.sms'])
 3.config.py文件
# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# Author     :skyTree
# version    :python 3.11
# Description:celery 配置文件
"""
# 指定任务队列的位置
broker_url = "redis://localhost:6379/0"
4.在项目后端文件下执行启动命令,即可,此时说明clery已经安装成功!
# celery_tasks.main为celery包名加主文件 
celery -A celery_tasks.main worker -l info
5.在task.py文件中将发送短信的任务注册到task中必须使用装饰器并在装饰器中设置别名便于区分
# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# Author     :skyTree
# version    :python 3.11
# Description:sms功能异步任务
"""
from .send_sms import Send_SMS
from ..main import celery_app


@celery_app.task(name='send_sms_code')
def send_sms_code(mobile, sms_code):
    """
    发送短信验证码的celery异步任务
    :param mobile: 手机号
    :param sms_code: 验证码
    :return:
    """
    Send_SMS().send(mobile=mobile, code=sms_code)
6.在视图函数中调用异步任务
# apply_async接受的参数必须为元组或者列表
result = send_sms_code.apply_async((mobile, sms_code,))

# 使用dealy方法也可以
result = send_sms_code.dealy(mobile, sms_code)
7.执行celery启动命令

注意: 必须使用 celery -A celery_tasks.main worker -l info -P eventlet 才会提示如下信息表示成功

如果使用 celery -A celery_tasks.main worker -l info 命令显示如下信息,此时任务根本没有执行

 8.设置定时和周期性任务
8.1 安装包

pip install django-celery-beat

8.2 在INSTALLED_APPS中注册
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_celery_beat', # 周期和定时任务
    'backend'
]
8.3 在settings中配置文件添加任务
CELERY_BEAT_SCHEDULE = {
    "add-every-30s": {
        "task": "backend.tasks.add_number", # 任务路径
        'schedule': 30.0,  # 每30秒执行1次
        'args': (1, 8)  # 传递参数-
    }
}
8.4 执行命令

执行 celery -A your_project_name worker -l info 用于启动任务

执行 celery -A your_project_name beat -l info 用于查看 周期任务结构

8.5 定时任务 
CELERY_BEAT_SCHEDULE = {
    ....
    # 每周五下午2点执行
    'add-every-friday-afternoon': {
        'task': 'backend.tasks.add_number',
        'schedule': crontab(day_of_week='5', hour='14', minute='0'),
        'args': (7, 8),
    },
}

结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值