欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django框架如何集成celery進(jìn)行開(kāi)發(fā)

 更新時(shí)間:2017年05月24日 08:53:46   作者:茁壯的小草  
本文給大家詳細(xì)講解了在django框架中如何集成celery進(jìn)行開(kāi)發(fā),步驟非常詳細(xì),有需要的小伙伴可以參考下

上一篇已經(jīng)介紹了celery的基本知識(shí),本篇以一個(gè)小項(xiàng)目為例,詳細(xì)說(shuō)明django框架如何集成celery進(jìn)行開(kāi)發(fā)。

本系列文章的開(kāi)發(fā)環(huán)境:

window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4
一、項(xiàng)目功能

      在web應(yīng)用中,用戶觸發(fā)一個(gè)操作,執(zhí)行后臺(tái)處理程序,這個(gè)程序需要執(zhí)行很長(zhǎng)時(shí)間才能返回結(jié)果。怎樣才能不阻塞http請(qǐng)求,不讓用戶等待從而提高用戶體驗(yàn)?zāi)兀窟@是本例需要解決的問(wèn)題。具體設(shè)計(jì)是:用兩個(gè)網(wǎng)頁(yè)進(jìn)行展示,一個(gè)網(wǎng)頁(yè)是提交加法計(jì)算任務(wù)到后臺(tái)進(jìn)行計(jì)算;另外一個(gè)網(wǎng)頁(yè)查看所有計(jì)算任務(wù)的詳細(xì)情況,如任務(wù)ID,任務(wù)狀態(tài)等。

就如下圖所示:輸入:http://127.0.0.1:8000/index/

點(diǎn)擊查看任務(wù)鏈接,查看所有任務(wù)的執(zhí)行情況:sucess表示執(zhí)行成功,started表示已經(jīng)開(kāi)始執(zhí)行了。

    

二、項(xiàng)目結(jié)構(gòu)

    Broker我這里選擇RabbitMQ,結(jié)果存儲(chǔ)Backend我選擇django-celery。

    

三、開(kāi)始編程

   1、安裝django-celery:  

$ pip install django-celery

   2、新建django工程項(xiàng)目test_celery,如下:

        

【說(shuō)明】:tools是django包,和test_celery是同級(jí)目錄,該包功能主要存放工具類函數(shù)和執(zhí)行的任務(wù);

              celery.py:celery配置文件信息

 3、編輯setting.py,添加配置celery broker和backend

#celery setting
import djcelery
djcelery.setup_loader()  #加載djcelery
BROKER_URL = 'pyamqp://guest@localhost//' #配置broker
BROKER_POOL_LIMIT = 0
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' #配置backend

INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'djcelery',  #django-celery必須添加
 'test_celery', 
]
DATABASES = { 'default': {  'ENGINE': 'django.db.backends.mysql',  'NAME': 'celery',  'USER':'username',  'PASSWORD':'password',  'HOST':'ip',  'PORT':3306, }}
 
4、新建celery.py文件,添加如下內(nèi)容:
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_celery.settings')

from django.conf import settings # noqa

app = Celery('test_celery')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
 print('Request: {0!r}'.format(self.request))
5、新建tasks.py文件,創(chuàng)建任務(wù)
from __future__ import absolute_import
from celery import shared_task
import time

@shared_task(track_started=True)
def add(x, y):
 time.sleep(30) #模擬長(zhǎng)時(shí)間執(zhí)行
 return x + y
6、創(chuàng)建model.py,新建存儲(chǔ)任務(wù)信息的表:
from django.db import models
#在數(shù)據(jù)庫(kù)中生成test_celery_add表
class Add(models.Model):
 task_id = models.CharField(max_length=128) #存儲(chǔ)taskid
 first = models.IntegerField()    #存儲(chǔ)第一個(gè)加數(shù)
 second = models.IntegerField()    #存儲(chǔ)第二個(gè)加數(shù)
 log_date = models.DateTimeField()   #存儲(chǔ)開(kāi)始時(shí)間
7、進(jìn)入test_celery目錄下,有manage.py那一層,執(zhí)行:
python manage.py makemigrations test_celery
python manage.py migrate

到這里會(huì)在數(shù)據(jù)庫(kù)中生成以下表:

8、接下來(lái)編寫前端html文件以及view文件,具體請(qǐng)自己編寫或者下載源碼運(yùn)行

9、編碼完成后,啟動(dòng)worker,然后就可以在網(wǎng)頁(yè)上進(jìn)行模擬操作了 

    進(jìn)入test_celery項(xiàng)目目錄下,也就是有manage.py文件那一層,執(zhí)行以下命令啟動(dòng)worker:

celery worker -A test_celery -l info
10、在瀏覽器中,http://127.0.0.1:8000/index/,錄入第一個(gè)加數(shù)和第二個(gè)加數(shù),點(diǎn)擊計(jì)算,就交給后臺(tái)tasks執(zhí)行了,這時(shí)可以點(diǎn)擊查看任務(wù)進(jìn)行查看。 

項(xiàng)目源代碼下載

相關(guān)文章

  • Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類

    Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類

    這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類,這是基礎(chǔ)學(xué)習(xí)的第三篇內(nèi)容,小編已把前兩篇鏈接放在下面,需要學(xué)習(xí)的同學(xué)可以參考一下
    2022-05-05
  • 解決pandas .to_excel不覆蓋已有sheet的問(wèn)題

    解決pandas .to_excel不覆蓋已有sheet的問(wèn)題

    今天小編就為大家分享一篇解決pandas .to_excel不覆蓋已有sheet的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python 實(shí)現(xiàn)視頻 圖像幀提取

    python 實(shí)現(xiàn)視頻 圖像幀提取

    今天小編就為大家分享一篇python 實(shí)現(xiàn)視頻 圖像幀提取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Web服務(wù)器框架 Tornado簡(jiǎn)介

    Web服務(wù)器框架 Tornado簡(jiǎn)介

    Tornado Web Server 是使用Python編寫出來(lái)的一個(gè)極輕量級(jí)、高可伸縮性和非阻塞IO的Web服務(wù)器軟件,著名的 Friendfeed 網(wǎng)站就是使用它搭建的。
    2014-07-07
  • 手把手帶你了解Python數(shù)據(jù)分析--matplotlib

    手把手帶你了解Python數(shù)據(jù)分析--matplotlib

    這篇文章主要介紹了Python實(shí)現(xiàn)matplotlib顯示中文的方法,結(jié)合實(shí)例形式詳細(xì)總結(jié)分析了Python使用matplotlib庫(kù)繪圖時(shí)顯示中文的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2021-08-08
  • 基于python traceback實(shí)現(xiàn)異常的獲取與處理

    基于python traceback實(shí)現(xiàn)異常的獲取與處理

    這篇文章主要介紹了基于python traceback實(shí)現(xiàn)異常的獲取與處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python利用matplotlib實(shí)現(xiàn)制作動(dòng)態(tài)條形圖

    Python利用matplotlib實(shí)現(xiàn)制作動(dòng)態(tài)條形圖

    說(shuō)到用 Python 制作動(dòng)態(tài)圖,首先想到的肯定是一些直接拿來(lái)就用的庫(kù),雖然我沒(méi)做過(guò),但是我相信一定有且不止一個(gè),搜了一圈后發(fā)現(xiàn)有個(gè)bar chart race庫(kù)看起來(lái)不錯(cuò),感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • Python使用type關(guān)鍵字創(chuàng)建類步驟詳解

    Python使用type關(guān)鍵字創(chuàng)建類步驟詳解

    在本文里我們給讀者們整理了關(guān)于Python如何使用type關(guān)鍵字創(chuàng)建類的相關(guān)知識(shí)點(diǎn),需要的朋友們參考學(xué)習(xí)下。
    2019-07-07
  • Python繪制直方圖的示例代碼

    Python繪制直方圖的示例代碼

    本文主要介紹了如何使用Python繪制直方圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 在python中計(jì)算ssim的方法(與Matlab結(jié)果一致)

    在python中計(jì)算ssim的方法(與Matlab結(jié)果一致)

    這篇文章主要介紹了在python中計(jì)算ssim的方法(與Matlab結(jié)果一致),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論