Django3.2 + Celery5.2实现异步任务

文章目录

    • 一、相关库版本信息
    • 二、Task任务的分类
    • 三、Celery简介
    • 四、实现异步任务


一、相关库版本信息

python==3.8.13
django==3.2.4 
redis==4.1.3 
celery==5.2
django-celery-beat==2.2.1

二、Task任务的分类

在程序中,任务大致可以分为同步任务和异步任务两种类型:
同步任务

指的是任务在主线程上需要排队执行的,只有前一个任务执行完毕,才能执行后一个任务。简单点就是说必须 等前一件事做完才能做下一件事。

异步任务

异步任务与同步则是相对的。当我们执行某个任务后,我们并不需要立即得到结果,我们可以正常地做其他操作,或者多次执行任务,这些任务不会等待前一个执行完再去执行,而且可以同时执行的,只需要执行完成后通知或者回调来告诉我们就可以了。

现在我们就是希望在Django框架中通过使用Celery实现异步任务的功能。

三、Celery简介

Celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。
Celery的组件介绍:

Beat:定时地将任务发往消息队列;
Worke:实时监视消息队列获取队列中的任务执行(可以一个或多个);
Broker:消息代理,又称消息中间件。就是生产者和消费者存放/拿取产品的地方(消费队列)。Celery目前支持RabbitMQ、Redis、MongoDB、Beanstalk、SQLAlchemy、Zookeeper等作为消息代理,官方推荐 RabbitMQ。
Result Backend:任务处理完后保存状态信息和结果,以供查询。

四、实现异步任务

项目目录
Django3.2 + Celery5.2实现异步任务_第1张图片
使用流程:

  1. 新建一个celery.py文件,此文件跟settings文件同级
    Django3.2 + Celery5.2实现异步任务_第2张图片
    代码:

    import os
    from celery import Celery
    from celery.utils.log import get_task_logger
    from celery.schedules import crontab
    
    # Set the default Django settings module for the 'celery' program.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'K_AUTOTESTING.settings')
    
    app = Celery('K_AUTOTESTING')
    
    # Using a string here means the worker doesn't have to serialize
    # the configuration object to child processes.
    # - namespace='CELERY' means all celery-related configuration keys
    #   should have a `CELERY_` prefix.
    app.config_from_object(

你可能感兴趣的:(Django,django,python,后端)