django框架如何集成celery進(jìn)行開發(fā)
上一篇已經(jīng)介紹了celery的基本知識(shí),本篇以一個(gè)小項(xiàng)目為例,詳細(xì)說明django框架如何集成celery進(jìn)行開發(fā)。
本系列文章的開發(fā)環(huán)境:
window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4
在web應(yīng)用中,用戶觸發(fā)一個(gè)操作,執(zhí)行后臺(tái)處理程序,這個(gè)程序需要執(zhí)行很長(zhǎng)時(shí)間才能返回結(jié)果。怎樣才能不阻塞http請(qǐng)求,不讓用戶等待從而提高用戶體驗(yàn)?zāi)??這是本例需要解決的問題。具體設(shè)計(jì)是:用兩個(gè)網(wǎng)頁進(jìn)行展示,一個(gè)網(wǎng)頁是提交加法計(jì)算任務(wù)到后臺(tái)進(jìn)行計(jì)算;另外一個(gè)網(wǎng)頁查看所有計(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)開始執(zhí)行了。

二、項(xiàng)目結(jié)構(gòu)
Broker我這里選擇RabbitMQ,結(jié)果存儲(chǔ)Backend我選擇django-celery。

三、開始編程
1、安裝django-celery:
$ pip install django-celery
2、新建django工程項(xiàng)目test_celery,如下:

【說明】: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, }}
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))
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
from django.db import models #在數(shù)據(jù)庫中生成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ǔ)開始時(shí)間
python manage.py makemigrations test_celery python manage.py migrate
到這里會(huì)在數(shù)據(jù)庫中生成以下表:

8、接下來編寫前端html文件以及view文件,具體請(qǐng)自己編寫或者下載源碼運(yùn)行。
9、編碼完成后,啟動(dòng)worker,然后就可以在網(wǎng)頁上進(jìn)行模擬操作了
進(jìn)入test_celery項(xiàng)目目錄下,也就是有manage.py文件那一層,執(zhí)行以下命令啟動(dòng)worker:
celery worker -A test_celery -l info
相關(guān)文章
Python tkinter實(shí)現(xiàn)簡(jiǎn)單加法計(jì)算器代碼實(shí)例
這篇文章主要介紹了Python tkinter實(shí)現(xiàn)簡(jiǎn)單加法計(jì)算器代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
如何使用 Python和 FFmpeg 批量截圖視頻到各自文件夾中
wxPython 提供了一個(gè)簡(jiǎn)單易用的界面,而 FFmpeg 則負(fù)責(zé)處理視頻幀的提取,這個(gè)工具不僅對(duì)視頻編輯工作有幫助,也為批量處理視頻文件提供了極大的便利,這篇文章主要介紹了使用 Python和 FFmpeg 批量截圖視頻到各自文件夾中,需要的朋友可以參考下2024-08-08
Python QTimer實(shí)現(xiàn)多線程及QSS應(yīng)用過程解析
這篇文章主要介紹了Python QTimer實(shí)現(xiàn)多線程及QSS應(yīng)用過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
pycharm最新免費(fèi)激活碼至2099年(21.3.18親測(cè)可用)
這篇文章主要介紹了pycharm最新的激活碼及激活碼的使用方法,幫助大家更好的利用pycharm學(xué)習(xí)python,感興趣的朋友可以了解下。2021-03-03
python將logging模塊封裝成單獨(dú)模塊并實(shí)現(xiàn)動(dòng)態(tài)切換Level方式
這篇文章主要介紹了python將logging模塊封裝成單獨(dú)模塊并實(shí)現(xiàn)動(dòng)態(tài)切換Level方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python實(shí)現(xiàn)名片管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
Python IDLE 錯(cuò)誤:IDLE''''s subprocess didn''''t make connectio
這篇文章主要介紹了Python IDLE 錯(cuò)誤:IDLE's subprocess didn't make connection 的解決方案的相關(guān)資料,需要的朋友可以參考下2017-02-02

