溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django中使用celery完成異步任務(wù)的示例代碼

發(fā)布時(shí)間:2020-09-26 09:23:12 來源:腳本之家 閱讀:175 作者:AustinKuture 欄目:開發(fā)技術(shù)

本文主要介紹如何在django中用celery完成異步任務(wù),web項(xiàng)目中為了提高用戶體驗(yàn)可以對(duì)一些耗時(shí)操作放到異步隊(duì)列中去執(zhí)行,例如激活郵件,后臺(tái)計(jì)算操作等等 當(dāng)前項(xià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項(xiàng)目及celery配置

1,創(chuàng)建Django項(xiàng)目

1>打開終端輸入:django-admin startproject TestCelery 創(chuàng)建django項(xiàng)目('TestCelery'是項(xiàng)目名稱)

2>進(jìn)行TestCelery在終端輸入指令:django-admin startapp testcelery 創(chuàng)建應(yīng)用('testcelery為應(yīng)用名稱')

2, 為celery設(shè)置環(huán)境變量

1>項(xiàng)目中在TestCelery中創(chuàng)建celery.py文件(與setting.py同級(jí))輸入以下內(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)前項(xiàng)目目錄如下圖所示:

 Django中使用celery完成異步任務(wù)的示例代碼                                

二,創(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ā)送請(qǐng)求=====<')
    for i in range(10):
      print('>>',end='')
      sleep(0.1)

    start_running.delay('》》》》》我是傳送過來的《《《《《')
    return HttpResponse('<h3> 請(qǐng)求已發(fā)送 </h3>')

3,編寫testcelery應(yīng)用的usrls

from django.conf.urls import url
from .views import *
urlpatterns = [
  url(r'^$', IdexView.as_view()),
]

4,當(dāng)前項(xiàng)目目錄如下圖所示:

Django中使用celery完成異步任務(wù)的示例代碼 

三,運(yùn)行項(xiàng)目,開啟worker

1, 運(yùn)行項(xiàng)目在當(dāng)前項(xiàng)目下輸入啟動(dòng)服務(wù)指令:python manager.py runserver,出現(xiàn)如下圖所示即代表運(yùn)行成功:

Django中使用celery完成異步任務(wù)的示例代碼

2,開啟worker另在當(dāng)前項(xiàng)目下另打開一個(gè)終端,輸入指令: celery -A TestCelery worker --loglevel=DEBUG,啟動(dòng)后如下如示:

Django中使用celery完成異步任務(wù)的示例代碼 

3,調(diào)用任務(wù)

1>打開瀏覽器,輸入http://127.0.0.1:8000/send/  進(jìn)行訪問

Django中使用celery完成異步任務(wù)的示例代碼

2> woker監(jiān)聽到任務(wù)請(qǐng)求時(shí),就會(huì)執(zhí)行耗時(shí)任務(wù),如下圖所示:

Django中使用celery完成異步任務(wù)的示例代碼

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI