Django中使用celery完成異步任務(wù)的示例代碼
本文主要介紹如何在django中用celery完成異步任務(wù),web項目中為了提高用戶體驗可以對一些耗時操作放到異步隊列中去執(zhí)行,例如激活郵件,后臺計算操作等等 當(dāng)前項目環(huán)境為: 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
一,創(chuàng)建Django項目及celery配置
1,創(chuàng)建Django項目
1>打開終端輸入:django-admin startproject TestCelery 創(chuàng)建django項目('TestCelery'是項目名稱)
2>進(jìn)行TestCelery在終端輸入指令:django-admin startapp testcelery 創(chuàng)建應(yīng)用('testcelery為應(yīng)用名稱')
2, 為celery設(shè)置環(huán)境變量
1>項目中在TestCelery中創(chuàng)建celery.py文件(與setting.py同級)輸入以下內(nèi)容:
from celery import Celery from django.conf import settings import os # 為celery設(shè)置環(huán)境變量 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TestCelery.settings') # 創(chuàng)建應(yīng)用 app = Celery('testcelery') # 酸配置應(yīng)用 app.conf.update( # 本地Redis服務(wù)器 BROKER_URL='redis://127.0.0.1:6379/2', ) app.autodiscover_tasks(settings.INSTALLED_APPS)
2>當(dāng)前項目目錄如下圖所示:
二,創(chuàng)建任務(wù)tasks,編寫視圖View及urls
1, 在testcelery應(yīng)用中新建tasks.py文件,并寫入要進(jìn)行處理的任務(wù):
from TestCelery.celery import app from time import sleep @app.task def start_running(nums): print('***>%s<***' %nums) print('--->>開始執(zhí)行任務(wù)<<---') for i in range(10): print('>>'*(i+1)) sleep(1) print('>---任務(wù)結(jié)束---<')
2,編寫view視圖,并寫入調(diào)用client的方法
from django.views import View from django.http import HttpResponse from .tasks import start_running from time import sleep # Create your views here. class IdexView(View): def get(self, request): print('>=====開始發(fā)送請求=====<') for i in range(10): print('>>',end='') sleep(0.1) start_running.delay('》》》》》我是傳送過來的《《《《《') return HttpResponse('<h2> 請求已發(fā)送 </h2>')
3,編寫testcelery應(yīng)用的usrls
from django.conf.urls import url from .views import * urlpatterns = [ url(r'^$', IdexView.as_view()), ]
4,當(dāng)前項目目錄如下圖所示:
三,運行項目,開啟worker
1, 運行項目在當(dāng)前項目下輸入啟動服務(wù)指令:python manager.py runserver,出現(xiàn)如下圖所示即代表運行成功:
2,開啟worker另在當(dāng)前項目下另打開一個終端,輸入指令: celery -A TestCelery worker --loglevel=DEBUG,啟動后如下如示:
3,調(diào)用任務(wù)
1>打開瀏覽器,輸入http://127.0.0.1:8000/send/ 進(jìn)行訪問
2> woker監(jiān)聽到任務(wù)請求時,就會執(zhí)行耗時任務(wù),如下圖所示:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python實現(xiàn)抓取HTML網(wǎng)頁并以PDF文件形式保存的方法
這篇文章主要介紹了Python實現(xiàn)抓取HTML網(wǎng)頁并以PDF文件形式保存的方法,結(jié)合實例形式分析了PyPDF2模塊的安裝及Python抓取HTML頁面并基于PyPDF2模塊生成pdf文件的相關(guān)操作技巧,需要的朋友可以參考下2018-05-05解決Django Static內(nèi)容不能加載顯示的問題
今天小編就為大家分享一篇解決Django Static內(nèi)容不能加載顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python傳統(tǒng)圖像處理之皮膚區(qū)域檢測詳解
這篇文章主要介紹了在不同情景下對傳統(tǒng)圖像進(jìn)行皮膚區(qū)域檢測,文章中的代碼具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起來學(xué)習(xí)學(xué)習(xí)2021-12-12Python使用pandas導(dǎo)入csv文件內(nèi)容的示例代碼
這篇文章主要介紹了Python使用pandas導(dǎo)入csv文件內(nèi)容,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12