celery,使用工人实现耗时操作外包

1:概述
用户在浏览器界面发起request请求,并瞪大response响应,在某些视图中,可能要执行一些耗时操作,比如发邮件,发短信验证码,从发起到用户接收,需要等待较长时间,在此期间,用户不能做任何操作,会造成用户体验差,因此需要采用celery操作,将耗时操作封装成函数,交给celery的工人worker去操作,用户发起请求后,立即回返回响应,耗时操作在后台继续进行,不影响前台的用户操作,提高用户的体验度

2,首先下载三个安装包,安装包的版本根据实际情况更改
sudo pip install celery3.1.25
sudo pip install celery-with-redis
3.0
sudo pip install django-celery==3.2.1

3,在settings文件中的INSTALLED_APPS中激活,即配置应用的位置,添加djcelery
INSTALLED_APPS = [
** ‘django.contrib.admin’,
** ‘django.contrib.auth’,
** ‘django.contrib.contenttypes’,
** ‘django.contrib.sessions’,
** ‘django.contrib.messages’,
**‘django.contrib.staticfiles’,
** ‘myApp’,
** ‘djcelery’,
]

3,配置redis
#celery
import djcelery
djcelery.setup_loader()

#redis链接串:“redis://:密码@主机ip:端口/库序号”
BROKER_URL = “redis://:redis密码@47.94.161.66:6379/0”

#注册任务文件:应用名.task
CELERY_IMPORTS = “myApp.task”

4,在应用目录下创建名为task.py的文件

5,在与工程目录同名的目录下创建名为celery.py的文件

6,文件内容

from future import absolute_import

import os
from celery import Celery
from django.conf import settings

os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘whthas_home.settings’)

app = Celery(‘project’)

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))

11,除了app=Celery(“project”),括号中的内容修改为自己的工程名外,其他的代码不用动

12,在与工程目录同名的 目录下的__init__.py文件中添加代码:
from .celery import app as celery_app

13,迁移生成相关表:
python manage.py migrate

14,在task.py文件中,封装耗时操作的任务函数,比如发送邮件,发送验证码的函数,这里只简单模拟发送邮件的耗时操作
import time
from celery import task

@task
def longIo():
** print(“开始耗时操作。。。。”)
** time.sleep(5)
** print(“结束耗时操作”)

15,注意封装的耗时操作函数必须添加装饰器@task,否则该函数就只是一个普通函数

16,views视图中定义相关的视图函数,如

from day47.task import longIo

def register(request):
** if request.method == “GET”:
** return render(request,“register.html”)
** else:
** # 将任务放入队列
****** longIo.delay()
****** return HttpResponse(“发送成功”)

17,启动redis和Django服务

18,启动worker:python manage.py celery worker --loglevel=info

18,此时如果注册时需要给用户发送激活邮件,验证码等信息,用户点击发送以后,会立即返回“发送成功”,后台会同时进行发送邮件,验证码等耗时操作,用户等待期间可以操作浏览器,进行其他操作,提高用户体验度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值