国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django框架如何集成celery進行開發(fā)

2019-11-25 16:09:33
字體:
來源:轉載
供稿:網(wǎng)友

上一篇已經(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 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文件,添加如下內(nèi)容:
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))
5、新建tasks.py文件,創(chuàng)建任務
from __future__ import absolute_importfrom celery import shared_taskimport time@shared_task(track_started=True)def add(x, y): time.sleep(30) #模擬長時間執(zhí)行 return x + y
6、創(chuàng)建model.py,新建存儲任務信息的表:
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()   #存儲開始時間
7、進入test_celery目錄下,有manage.py那一層,執(zhí)行:
python manage.py makemigrations test_celerypython 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
10、在瀏覽器中,http://127.0.0.1:8000/index/,錄入第一個加數(shù)和第二個加數(shù),點擊計算,就交給后臺tasks執(zhí)行了,這時可以點擊查看任務進行查看。 

項目源代碼下載

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天全县| 长泰县| 左贡县| 龙山县| 阳高县| 桐城市| 涿鹿县| 松滋市| 锦州市| 沂南县| 峨眉山市| 朝阳市| 张家口市| 长子县| 波密县| 张家界市| 北票市| 天等县| 五原县| 资中县| 广宗县| 祁门县| 桂林市| 南岸区| 铁岭县| 太谷县| 锡林浩特市| 黔江区| 宁远县| 墨竹工卡县| 大石桥市| 岫岩| 理塘县| 嘉定区| 滁州市| 平安县| 金山区| 顺平县| 奉化市| 金湖县| 讷河市|