Django异步任务组件celery

什么是异步任务

后端接口接收到用户信息变更数据 -> 往数据库的2张表中写入该用户的数据。

正常运行顺序为:先写入表1 -> 再写入表2 -> 给用户返回信息更改成功的提示

先写入表1、再写入表2,相当于同一时间内,只做了一件事情。

异步运行顺序为:写入表1的同时,也在写入表2 -> 给用户返回信息更改成功的提示

写入表1的同时写入表2,相当于同一时间内,做了两件事情。

在服务器资源允许的情况下,异步运行可以提高接口的运行速度,更快地给用户返回结果,减少等待时间。

什么是celery

Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。即插即用,易于使用和维护,单个进程每分钟可以处理数百万个任务。
django-celery只是将任务发布出去,让长时间的任务:爬取一个网站,发送一个验证码这样的工作,不再阻塞主线程,web服务器只负责发起任务和接受任务的结果,中间执行的部分交给其他线程、进程、服务器去做。
在这里插入图片描述

可以看到,Celery 主要包含以下几个模块:

任务模块 Task

包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。

消息中间件 Broker

Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。

任务执行单元 Worker

Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它。

任务结果存储 Backend

Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用 RabbitMQ, Redis 和 MongoDB 等。

celery使用指南

celery使用教程
redis兼容性问题解决方案
redis客户端操作指南
celery异步任务与调用返回值

为tasks.py设置django环境配置

顺序不能错

import os
import sys
import django

BASE_DIR = os.path.dirname(os.path.abspath(__file__))  # 定位到django根目录
sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoProject1.settings")  # django的settings文件
django.setup()

celery 定时任务

在tasks.py之中更新app的设置

app.conf.update(
    CELERYBEAT_SCHEDULE={
        'do-task-everyday-func': {
            'task': 'func',
            'schedule': crontab(minute='30', hour='10', day_of_week='*',   
                                day_of_month='*', month_of_year='*')
        }
})

随后启动定时任务的beat程序执行

celery -A tasks beat --loglevel=info
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值