Django学习笔记(二十二):Celery简介和实现基础的异步操作

Celery简介

Celery是一个基于python开发的分布式异步消息,通过他可以轻松的实现任务的异步处理

应用

异步调用:那些用户不关心的但是又存在在我们API里面的操作,我们就可以用异步调用的方式来优化(例如发送邮件,头像上传)

定时任务:定期去统计日子,数据备份,或者其他的统计任务

Celery的相关概念

task

需要执行的任务

worker

负责干活的小弟

broker

任务队列(worker拿任务的地方)

backend

干完活,结果存放的位置

Celery的安装

pip install celery

pip install celery-with-redis

pip install django-celery

sudo apt install redis-server #如果安装了redis就不用执行

配置

在settings.py文件中的INSTALLED_APPS添加'dicelery',

ALLOWED_HOSTS = ['*']
INSTALLED_APPS = (
      ...
      'djcelery',
‘自己的APP’
    }

在settings.py文件中添加celery配置

import djcelery
djcelery.setup_loader()
BROKER_URL='redis://localhost:6379/1'(localhost写你的路由)
CELERY_CONCURRENCY=2(设置worker的并发数量)
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'

在settings.py的同级目录下新建celery.py

from __future__import absolute_import#绝对路径导入
from celery import Celery
from django.conf import settings
import os

#设置系统的环境配置用的是Django的
os.environ.setdefault("DJANGO_SETTING_MODULE","工程名字.settings")

#实例化celery
app = Celery("mycelery")

app.conf.timezone = "Asia/Shanghai"

#指定celery的配置来源 用的是项目的配置文件settings.py
app.config_from_object("django.conf:settings")

#让celery 自动去发现我们的任务
app.autodiscover_tasks(lambda:settings.INSTALLED_APPS)#你需要在app目录下新建一个tasks.py文件(文件名不能错)

settings.py 同级目录下的__init__.py加入

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

运行工程检测配置是否成功

配置成功

异步操作示例

1,在需要使用异步任务的APP目录下新建tasks.py

#这里写一个延时任务示例

from celery import task
import time

@task
def first_task(loopnum):
    for i in range(loopnum):
        time.sleep(1)
        print("休眠时间")

在views.py内调用

from .tasks import first_task

def first_celery(req):
    #任务函数的异步调用
    first_task.delay(4)
    return HttpResponse("OK")

复制一个服务器,在这个服务器内进入相应的项目位置,启动worker

python manage.py celery worker --loglevel=info

运行效果:

前端页面不需要进行等待,在worker中进行了等待

猜你喜欢

转载自blog.csdn.net/xiaohuoche175/article/details/81476850