celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度。采用典型的生产者-消费者模型,主要由三部分组成:

1. 消息队列broker:broker实际上就是一个MQ队列服务,可以使用redis、rabbitmq等作为broker
2. 处理任务的消费者workers:broker通知worker队列中有任务,worker去队列中取出任务执行,每一个worker就是一个进程
3. 存储结果的backend:执行结果存储在backend,默认也会存储在broker使用的MQ队列服务中,也可以单独配置用何种服务做backend

flask,django是同步框架,所有的请求以队列形式完成。这样的话效率极差,用户体验不好,为了解决这个问题引入celery异步方式在后台执行这些任务(这里使用到了redis,3.0以下兼容性更好)

1,安装依赖

pip install celery

pip install celery-with-redis

pip install django-celery

2,settings.py设置

#配置celery
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_IMPORTS = ('mymac.tasks') #需执行异步的子应用 #将djcelery安装到应用中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mysg',
'lianxi',
"rest_framework",
'corsheaders',
#异步
'djcelery',
]

3,将异步的应用中注册celery.py

import os
import django
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mymac.settings')
django.setup()
app = Celery('mymac')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))

4,建立异步任务和定时任务的(tasks.py)

  • 注意tasks.py必须建在各app的根目录下,且只能叫tasks.py,不能随意命名

  异步任务

import time,random
from celery import task
#发邮件
from django.core.mail import send_mail
from django.http import HttpResponse
#定义异步写文件方法
@task
def file_task():
#写文件操作 文件对象
file_object = open("./data.text",'a+',encoding='utf-8')
file_object.write("hello")
file_object.close()
print("ok") #定义异步发邮件的方法
@task
def email_():
captcha_text = []
for i in range(4):
#定义验证码字符
str = 'qwertyuiopasdfghjklzxcvbnm1234567890'
c = random.choice(str)
captcha_text.append(c)
#返回随机生成的字符串
captcha = "".join(captcha_text)
res = send_mail("欢迎注册",'您的验证码是:'+ captcha,['396961930@qq.com'],DEFAULT_FROM_EMAIL)
if res:
return HttpResponse("发送成功")
else:
return HttpResponse("发送失败")

views.py中引用使用这个tasks异步处理

from mymac.tasks import email,file_task

#异步发邮件
def email(request):
print(email_.delay())
return HttpResponse("异步发邮件")
#异步写入文件
def failtask(request):
print(file_task.delay())
return HttpResponse("success") #配好路由触发任务即可

  定时任务

#导入定时任务库
from celery.decorators import periodic_task
from celery.schedules import crontab
#发短信
from twilio.rest import Client #定义20点10分发送
#@periodic_task(run_every=crontab(minute=10,hour=20))
#定义10秒发送一次
@periodic_task(run_every=10)
def mail():
#定义短信sid
account_sid = 'ACbccc4d2127e888e6f6654dc8128c019e'
#定义秘钥
auth_token = 'a0f31b24c76c65c20c6400dc94537ac6'
#定义客户端对象
clinet = Client(account_sid,auth_token)
#定义短信内容 1,发给谁 2,发信人 3,内容
status = clinet.messages.create(to="+8616637712137",from_="+12016361207",body="hello world")
if status:
print("发送成功") #注意时区 例如中国
#settings.py 设置 语言相关配置
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai' crontab的参数有:
month_of_year:月份
day_of_month:日期
day_of_week:周
hour:小时
minute:分钟

5,启动任务

启动服务的命令:

celery -A mymac beat -l info 定时任务
celery -A mymac worker -l info 异步任务

Django+Celery 执行异步任务和定时任务的更多相关文章

  1. celery执行异步任务和定时任务

    一.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组成,消息中间件 ...

  2. Django配置celery执行异步任务和定时任务

    原生celery,非djcelery模块,所有演示均基于Django2.0 celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线 ...

  3. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  4. django —— Celery实现异步和定时任务

    1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...

  5. Django Celery Redis 异步执行任务demo实例

    一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...

  6. django -- Celery实现异步任务

    1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...

  7. 使用django + celery + redis 异步发送邮件

    参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7  +  python3.6.1 + django2.0.1  ...

  8. xadmin引入celery4.0执行异步任务与定时任务

    一.安装 pip install celery pip install django-celery-beat pip install django-celery-results pip install ...

  9. celery异步任务、定时任务

    阅读目录 一 什么是Celery? 二 Celery的使用场景 三 Celery的安装配置 四 Celery异步任务 五Celery定时任务 六在Django中使用Celery   一 什么是Cele ...

随机推荐

  1. 【iCore4 双核心板_ARM】例程七:WWDG看门狗实验——复位ARM

    实验原理: STM32内部包含窗口看门狗,通过看门狗可以监控程序运行,程序运行错误时,未在 规定时间喂狗(提前或超时),自动复位ARM,本实验通过按键按下,停止喂狗,从而产 生复位. 核心代码: in ...

  2. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

  3. CentOS 7 设置静态IP

    cd /etc/sysconfig/network-scripts/ sudo vi ifcfg-eno16777736 BOOTPROTO=static #dhcp改为static(修改) IPAD ...

  4. Spark学习笔记——键值对操作

    键值对 RDD是 Spark 中许多操作所需要的常见数据类型 键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式. Spark 为包 ...

  5. DOTween 使用方法

    参考链接: http://dotween.demigiant.com/documentation.php https://www.cnblogs.com/backlighting/p/5344047. ...

  6. 【hive】 hive 加载数据

    1. insert 插入数据 要保证启动了jobhistory 否则会抛出异常 hdfs中查看内容 2. create table 表名字 select 字段... from  表名 hdfs查看数据 ...

  7. rtmp推送aac没有声音的问题记录

      症状是这样的:用librtmp推流aac后,用vlc能收到推流的声音,但是用flash却播放不了推流的声音.   查了几天,用工具抓取推流的数据,发现rtmp数据包中的头部信息有一个Chunk S ...

  8. html div+css做页面布局

    http://blog.csdn.net/mercop/article/details/7882000 HTML CSS + DIV实现整体布局 1.技术目标: 开发符合W3C标准的Web页面 理解盒 ...

  9. js的微任务和宏任务

    1.机制如下: 注意一点: 宏任务需要多次事件循环才能执行完,微任务是一次性执行完的: 2.宏任务macrotask: (事件队列中的每一个事件都是一个macrotask) 优先级:主代码块 > ...

  10. JQuery EasyUI DataGrid获取当前行

    1.获取当前行索引 var rowIndex = $('#dg').datagrid('getRowIndex', row); 2.根据索引删除当前行 $('#dg').datagrid('delet ...