本文主要介紹如何在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()),]
新聞熱點
疑難解答