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中进行了等待