本文主要介绍如何在django中用celery完成异步任务,web项目中为了提高用户体验可以对一些耗时操作放到异步队列中去执行,例如激活邮件,后台计算操作等等 当前项目环境为: django==1.11.8 celery==3.1.25 redis==2.10.6 pip==9.0.1 python3==3.5.2 django-celery==3.1.17
一,创建Django项目及celery配置
1,创建Django项目
1>打开终端输入:django-admin startproject TestCelery 创建django项目('TestCelery'是项目名称)
2>进行TestCelery在终端输入指令:django-admin startapp testcelery 创建应用('testcelery为应用名称')
2, 为celery设置环境变量
1>项目中在TestCelery中创建celery.py文件(与setting.py同级)输入以下内容:
from celery import Celeryfrom django.conf import settingsimport os# 为celery设置环境变量os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TestCelery.settings')# 创建应用app = Celery('testcelery')# 酸配置应用app.conf.update( # 本地Redis服务器 BROKER_URL='redis://127.0.0.1:6379/2',)app.autodiscover_tasks(settings.INSTALLED_APPS)
2>当前项目目录如下图所示:
二,创建任务tasks,编写视图View及urls
1, 在testcelery应用中新建tasks.py文件,并写入要进行处理的任务:
from TestCelery.celery import appfrom time import sleep@app.taskdef start_running(nums): print('***>%s<***' %nums) print('--->>开始执行任务<<---') for i in range(10): print('>>'*(i+1)) sleep(1) print('>---任务结束---<')
2,编写view视图,并写入调用client的方法
from django.views import Viewfrom django.http import HttpResponsefrom .tasks import start_runningfrom time import sleep# Create your views here.class IdexView(View): def get(self, request): print('>=====开始发送请求=====<') for i in range(10): print('>>',end='') sleep(0.1) start_running.delay('》》》》》我是传送过来的《《《《《') return HttpResponse('<h2> 请求已发送 </h2>')
3,编写testcelery应用的usrls
from django.conf.urls import urlfrom .views import *urlpatterns = [ url(r'^$', IdexView.as_view()),]
新闻热点
疑难解答