python使用celery实现异步任务执行的例子


Posted in Python onAugust 28, 2019

使用celery在django项目中实现异步发送短信

在项目的目录下创建celery_tasks用于保存celery异步任务。

在celery_tasks目录下创建config.py文件,用于保存celery的配置信息

```broker_url = "redis://127.0.0.1/14"```

在celery_tasks目录下创建main.py文件,用于作为celery的启动文件

from celery import Celery
 # 为celery使用django配置文件进行设置

import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
  os.environ['DJANGO_SETTINGS_MODULE'] = 'model.settings.dev'

 # 创建celery应用

app = Celery('model')

 #导入celery配置

app.config_from_object('celery_tasks.config')
 #自动注册celery任务
app.autodiscover_tasks(['celery_tasks.sms'])

在celery_tasks目录下创建sms目录,用于放置发送短信的异步任务相关代码。

将提供的发送短信的云通讯SDK放到celery_tasks/sms/目录下。

在celery_tasks/sms/目录下创建tasks.py(这个名字是固定的,非常重要,系统将会自动从这个文件中找任务队列)文件,用于保存发送短信的异步任务

import logging

  from celery_tasks.main import app
  from .yuntongxun.sms import CCP

  logger = logging.getLogger("django")

   #验证码短信模板
  SMS_CODE_TEMP_ID = 1

  @app.task(name='send_sms_code')
    def send_sms_code(mobile, code, expires):

  发送短信验证码
  :param mobile: 手机号
  :param code: 验证码
  :param expires: 有效期
  :return: None


  try:
    ccp = CCP()
    result = ccp.send_template_sms(mobile, [code, expires], SMS_CODE_TEMP_ID)
  except Exception as e:
    logger.error("发送验证码短信[异常][ mobile: %s, message: %s ]" % (mobile, e))
  else:
    if result == 0:
      logger.info("发送验证码短信[正常][ mobile: %s ]" % mobile)
    else:
      logger.warning("发送验证码短信[失败][ mobile: %s ]" % mobile)

在verifications/views.py中改写SMSCodeView视图,使用celery异步任务发送短信

from celery_tasks.sms import tasks as sms_tasks

class SMSCodeView(GenericAPIView):
  ...
    # 发送短信验证码 这是将时间转化为分钟,constants.SMS_CODE_REDIS_EXPIRES 是常量
    sms_code_expires = str(constants.SMS_CODE_REDIS_EXPIRES // 60)

    sms_tasks.send_sms_code.delay(mobile, sms_code, sms_code_expires)

    return Response({"message": "OK"})

以上这篇python使用celery实现异步任务执行的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中Collection的使用小技巧
Aug 18 Python
Python MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
Python打印输出数组中全部元素
Mar 13 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
使用python判断你是青少年还是老年人
Nov 29 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
详解Python并发编程之创建多线程的几种方法
Aug 23 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
Python中字符串对象语法分享
Feb 24 Python
Python正则表达式中flags参数的实例详解
Apr 01 Python
Python Gitlab Api 使用方法
Aug 28 #Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 #Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 #Python
Python的垃圾回收机制详解
Aug 28 #Python
Python通过cv2读取多个USB摄像头
Aug 28 #Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 #Python
Django--权限Permissions的例子
Aug 28 #Python
You might like
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
php unlink()函数使用教程
2018/07/12 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
python多线程http下载实现示例
2013/12/30 Python
python调用新浪微博API项目实践
2014/07/28 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
学习python需要有编程基础吗
2020/06/02 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
辞职信的写法
2015/02/27 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL