django框架如何集成celery進行開發(fā)
上一篇已經(jīng)介紹了celery的基本知識,本篇以一個小項目為例,詳細說明django框架如何集成celery進行開發(fā)。
本系列文章的開發(fā)環(huán)境:
window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4
在web應用中,用戶觸發(fā)一個操作,執(zhí)行后臺處理程序,這個程序需要執(zhí)行很長時間才能返回結果。怎樣才能不阻塞http請求,不讓用戶等待從而提高用戶體驗呢?這是本例需要解決的問題。具體設計是:用兩個網(wǎng)頁進行展示,一個網(wǎng)頁是提交加法計算任務到后臺進行計算;另外一個網(wǎng)頁查看所有計算任務的詳細情況,如任務ID,任務狀態(tài)等。
就如下圖所示:輸入:http://127.0.0.1:8000/index/
點擊查看任務鏈接,查看所有任務的執(zhí)行情況:sucess表示執(zhí)行成功,started表示已經(jīng)開始執(zhí)行了。
二、項目結構
Broker我這里選擇RabbitMQ,結果存儲Backend我選擇django-celery。
三、開始編程
1、安裝django-celery:
$ pip install django-celery
2、新建django工程項目test_celery,如下:
【說明】:tools是django包,和test_celery是同級目錄,該包功能主要存放工具類函數(shù)和執(zhí)行的任務;
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í)行 return x + y
from django.db import models #在數(shù)據(jù)庫中生成test_celery_add表 class Add(models.Model): task_id = models.CharField(max_length=128) #存儲taskid first = models.IntegerField() #存儲第一個加數(shù) second = models.IntegerField() #存儲第二個加數(shù) log_date = models.DateTimeField() #存儲開始時間
python manage.py makemigrations test_celery python manage.py migrate
到這里會在數(shù)據(jù)庫中生成以下表:
8、接下來編寫前端html文件以及view文件,具體請自己編寫或者下載源碼運行。
9、編碼完成后,啟動worker,然后就可以在網(wǎng)頁上進行模擬操作了
進入test_celery項目目錄下,也就是有manage.py文件那一層,執(zhí)行以下命令啟動worker:
celery worker -A test_celery -l info
相關文章
解決pandas .to_excel不覆蓋已有sheet的問題
今天小編就為大家分享一篇解決pandas .to_excel不覆蓋已有sheet的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12手把手帶你了解Python數(shù)據(jù)分析--matplotlib
這篇文章主要介紹了Python實現(xiàn)matplotlib顯示中文的方法,結合實例形式詳細總結分析了Python使用matplotlib庫繪圖時顯示中文的相關操作技巧與注意事項,需要的朋友可以參考下2021-08-08基于python traceback實現(xiàn)異常的獲取與處理
這篇文章主要介紹了基于python traceback實現(xiàn)異常的獲取與處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12Python利用matplotlib實現(xiàn)制作動態(tài)條形圖
說到用 Python 制作動態(tài)圖,首先想到的肯定是一些直接拿來就用的庫,雖然我沒做過,但是我相信一定有且不止一個,搜了一圈后發(fā)現(xiàn)有個bar chart race庫看起來不錯,感興趣的可以跟隨小編一起學習一下2022-10-10Python使用type關鍵字創(chuàng)建類步驟詳解
在本文里我們給讀者們整理了關于Python如何使用type關鍵字創(chuàng)建類的相關知識點,需要的朋友們參考學習下。2019-07-07在python中計算ssim的方法(與Matlab結果一致)
這篇文章主要介紹了在python中計算ssim的方法(與Matlab結果一致),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12