作用:在使用框架时,在视图函数中实现异步
构成:
任务task:一段耗时并与响应结果无关的代码,如发短信
工人worker:新进程,用于执行任务代码
代理人broker:调用任务时,将任务添加到队列中,通知worker执行
队列queue:用于存储待执行的任务

调用:任务函数.delay(参数)

说明:定义任务函数的文件tasks.py,文件名是固定的
实现步骤:
1.在项目目录下,新建包celery_tasks用于保存celery异步任务
2.在celery_tasks包下新建config.py,指定代理人,用于保存celery的配置信息

# 指定使用redis作为代理人,将来,redis会存储待执行任务队列
broker_url = 'redis://127.0.0.1:6379/14'

3.在celery_tasks包下新建main.py,创建celery对象,配置自动识别任务,用于作为celery的启动文件

from celery import Celery

# 为celery使用django配置文件进行设置
import os
os.environ['DJANGO_SETTINGS_MODULE'] = '(项目settings地址)' # 创建celery应用,Celery(‘名字可随意’)
app = Celery('taobao') # 导入celery配置
app.config_from_object('celery_tasks.config') # 自动注册celery任务
app.autodiscover_tasks([
'celery_tasks.sms_code',
]) 

4.在celery_tasks新建包,如sms_code

5.在celery_tasks/sms_code/下创建tasks.py,用于保存发送短信的异步任务
6.定义方法,封装耗时代码,添加装饰器

from celery_tasks.main import app

@app.task(name='send_sms_code')
def send_sms_code(code):
# 定义方法,封装耗时代码
print(code)

7.在main.py中注册
8.启动工人,如果代码发生改变,需要重启任务
9.在视图函数中调用verifications/views.py:任务方法.delay(参数)(这里没有调用第三方接口发短信,只是打印出验证码)

  

class SmsView(APIView):
# 接收手机号,发短信
def get(self, request, mobile):
# 连接redis,指定cache中的键
redis_cli = get_redis_connection('sms_code') # 1.验证是否向此手机号发过短信,如果发过则返回提示
if redis_cli.get('sms_flag_' + mobile):
return Response({'message': '已经发送'}) # 2.如果未发过,则发短信
# 2.1生成随机6位数
sms_code = random.randint(100000, 999999) # 优化,只与redis交互一次
redis_pipeline = redis_cli.pipeline()
redis_pipeline.setex('sms_' + mobile, constants.SMS_CODE_EXPIRES, sms_code)
redis_pipeline.setex('sms_flag_' + mobile, constants.SMS_FLAG_EXPIRES, 1)
redis_pipeline.execute() # 2.4发短信,可以调用第三方短信平台发短信
# print(sms_code)
send_sms_code.delay(sms_code) # 3.响应
return Response({'message': 'OK'})

  

10.启动celery服务

执行命令

celery -A celery_tasks.main worker -l info

  

Django框架中,使用celery实现异步的更多相关文章

  1. Django项目中使用celery做异步任务

    异步任务介绍 在写项目过程中经常会遇到一些耗时的任务, 比如:发送邮件.发送短信等等~.这些操作如果都同步执行耗时长对用户体验不友好,在这种情况下就可以把任务放在后台异步执行 celery就是用于处理 ...

  2. 分布式队列celery 异步----Django框架中的使用

    仅仅是个人学习的过程,发现有问题欢迎留言 一.celery 介绍 celery是一种功能完备的即插即用的任务对列 celery适用异步处理问题,比如上传邮件.上传文件.图像处理等比较耗时的事情 异步执 ...

  3. Django框架中的Context使用

    Django框架中的Context使用 2017年11月09日 20:01:09 aweilark 阅读数:1113   转载自:http://www.aichengxu.com/python/606 ...

  4. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  5. Python的Django框架中的Cookie相关处理

    Python的Django框架中的Cookie相关处理 浏览器的开发人员在非常早的时候就已经意识到. HTTP's 的无状态会对Web开发人员带来非常大的问题,于是(cookies)应运而生. coo ...

  6. Python的Django框架中的Context使用

    Python的Django框架中的Context使用 近期整理些Python方面的知识,一旦你创建一个 Template 对象,你能够用 context 来传递数据给它. 一个context是一系列变 ...

  7. Django框架中使用Echart进行统计的SQL语句

    最近想用Echart做数据统计的图形显示,数据来源是MySQL数据库,自然需要根据不同的搜索条件筛选出表中的数据,用比较多的就是时间的参数吧! 常用的mysql时间的条件进行检索的SQL语句: 数据表 ...

  8. Python中的Django框架中prefetch_related()函数对数据库查询的优化

    实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  9. Python的Django框架中的URL配置与松耦合

    Python的Django框架中的URL配置与松耦合 用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比 ...

  10. Django框架中logging的使用

    Django框架中logging的使用 日志是我们在项目开发中必不可少的一个环节,Python中内置的logging已经足够优秀到可以直接在项目中使用. 本文介绍了如何在DJango项目中配置日志. ...

随机推荐

  1. Centos环境自写脚本查看使用php或nginx占用内存

    在CentOs6.4下,用root权限测试. # cd ~ //进入home目录 # vim .bashrc //编辑文件,把下面代码放入地址 mem () { top -n1 -b | head - ...

  2. 【题解】Luogu P1533 可怜的狗狗

    原题传送门 莫队介绍,Splay介绍 离线的题目,莫队是不错的解决方法 先把询问排一下序 剩下就套一个莫队的板子 每来一只狗就把漂亮值插入平衡树 每去掉一只狗就把漂亮值从平衡树中删掉 每次查询查平衡树 ...

  3. (4opencv)如何基于GOCW,创建一个实时视频程序

    直接使用提供的代码框架进行修改,是最快得到效果的方法:但是这样的灵活性较差,而且真正的程序员从来都不会停滞在这一步:我们需要的是"将框架解析到最小化.理清楚每个构建之间的关系",只 ...

  4. CAN通信工作原理个人心得

    CAN总线结构示意图: 说明: 1:CAN收发器(示意图中的单元)根据两总线CAN_H和CAN_L的电位差来判断总线电平: 2:实际中CAN_H与CAN_L由双绞线组成: 3:数据传递终端的电阻器,是 ...

  5. QML获取随机颜色

    rect.color =);//random返回0~1的随机数

  6. Navicat for MySQL安装工具及破解工具

    链接: http://pan.baidu.com/s/1i500eEh 密码: 9s26

  7. Git rebase的使用

    rebase 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是“rebase”,怎样使用“rebase”,并将展示该操作的惊艳之处,以及指 ...

  8. C# 基于任务的异步模式的创建与使用的简单示例

    对于窗体程序,使用基于任务的异步模式需要用到Task类,下面示例下非常简单的用法. 1.创建一个拥有异步方法的类 该类拥有一个异步方法DoSomthingAsync,根据微软建议的命名规则该方法要带A ...

  9. luogu1387 最大正方形

    P1387 最大正方形 正方形O(n) 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n, ...

  10. 设计模式总结(转自CS-Notes)

    转载地址:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F ...