上一篇已經介紹了celery的基本知識,本篇以一個小項目為例,詳細說明django框架如何集成celery進行開發。
本系列文章的開發環境:
window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4一、項目功能
在web應用中,用戶觸發一個操作,執行后臺處理程序,這個程序需要執行很長時間才能返回結果。怎樣才能不阻塞http請求,不讓用戶等待從而提高用戶體驗呢?這是本例需要解決的問題。具體設計是:用兩個網頁進行展示,一個網頁是提交加法計算任務到后臺進行計算;另外一個網頁查看所有計算任務的詳細情況,如任務ID,任務狀態等。
就如下圖所示:輸入:http://127.0.0.1:8000/index/

點擊查看任務鏈接,查看所有任務的執行情況:sucess表示執行成功,started表示已經開始執行了。
    
二、項目結構
Broker我這里選擇RabbitMQ,結果存儲Backend我選擇django-celery。
    
三、開始編程
1、安裝django-celery:
$ pip install django-celery
2、新建django工程項目test_celery,如下:
        
【說明】:tools是django包,和test_celery是同級目錄,該包功能主要存放工具類函數和執行的任務;
celery.py:celery配置文件信息
3、編輯setting.py,添加配置celery broker和backend
#celery settingimport djcelerydjcelery.setup_loader()  #加載djceleryBROKER_URL = 'pyamqp://guest@localhost//' #配置brokerBROKER_POOL_LIMIT = 0CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' #配置backendINSTALLED_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文件,添加如下內容:from __future__ import absolute_importimport osfrom 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 # noqaapp = 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))            
新聞熱點
疑難解答