亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

異步任務隊列Celery在Django中的使用方法

 更新時間:2018年06月07日 09:30:08   作者:zni.feng  
對于網站來說,給用戶一個較好的體驗是很重要的事情,其中最重要的指標就是網站的瀏覽速度。因此服務端要從各個方面對網站性能進行優(yōu)化,這篇文章主要介紹了異步任務隊列Celery在Django中的使用方法,感興趣的小伙伴們可以參考一下

前段時間在Django Web平臺開發(fā)中,碰到一些請求執(zhí)行的任務時間較長(幾分鐘),為了加快用戶的響應時間,因此決定采用異步任務的方式在后臺執(zhí)行這些任務。在同事的指引下接觸了Celery這個異步任務隊列框架,鑒于網上關于Celery和Django結合的文檔較少,大部分也只是粗粗介紹了大概的流程,在實踐過程中還是遇到了不少坑,希望記錄下來幫助有需要的朋友。

一、Django中的異步請求

Django Web中從一個http請求發(fā)起,到獲得響應返回html頁面的流程大致如下:http請求發(fā)起 -- http handling(request解析) -- url mapping(url正則匹配找到對應的View) -- 在View中進行邏輯的處理、數據計算(包括調用Model類進行數據庫的增刪改查)--將數據推送到template,返回對應的template/response。

圖1. Django架構總覽

同步請求:所有邏輯處理、數據計算任務在View中處理完畢后返回response。在View處理任務時用戶處于等待狀態(tài),直到頁面返回結果。

異步請求:View中先返回response,再在后臺處理任務。用戶無需等待,可以繼續(xù)瀏覽網站。當任務處理完成時,我們可以再告知用戶。

二、關于Celery

Celery是基于Python開發(fā)的一個分布式任務隊列框架,支持使用任務隊列的方式在分布的機器/進程/線程上執(zhí)行任務調度。

圖2. Celery架構

圖2展示的是Celery的架構,它采用典型的生產生-消費者模式,主要由三部分組成:broker(消息隊列)、workers(消費者:處理任務)、backend(存儲結果)。實際應用中,用戶從Web前端發(fā)起一個請求,我們只需要將請求所要處理的任務丟入任務隊列broker中,由空閑的worker去處理任務即可,處理的結果會暫存在后臺數據庫backend中。我們可以在一臺機器或多臺機器上同時起多個worker進程來實現(xiàn)分布式地并行處理任務。

三、Django中Celery的實現(xiàn)

在實際使用過程中,發(fā)現(xiàn)在Celery在Django里的實現(xiàn)與其在一般.py文件中的實現(xiàn)還是有很大差別,Django有其特定的使用Celery的方式。這里著重介紹Celery在Django中的實現(xiàn)方法,簡單介紹與其在一般.py文件中實現(xiàn)方式的差別。

1. 建立消息隊列

首先,我們必須擁有一個broker消息隊列用于發(fā)送和接收消息。Celery官網給出了多個broker的備選方案:RabbitMQ、Redis、Database(不推薦)以及其他的消息中間件。在官網的強力推薦下,我們就使用RabbitMQ作為我們的消息中間人。在Linux上安裝的方式如下:

sudo apt-get install rabbitmq-server

命令執(zhí)行成功后,rabbitmq-server就已經安裝好并運行在后臺了。

另外也可以通過命令rabbitmq-server來啟動rabbitmq server以及命令rabbitmqctl stop來停止server。

更多的命令可以參考rabbitmq官網的用戶手冊:https://www.rabbitmq.com/manpages.html

2. 安裝django-celery

pip install celery
pip install django-celery

3. 配置settings.py

首先,在Django工程的settings.py文件中加入如下配置代碼:

import djcelery
djcelery.setup_loader()
BROKER_URL= 'amqp://guest@localhost//'
CELERY_RESULT_BACKEND = 'amqp://guest@localhost//'

其中,當djcelery.setup_loader()運行時,Celery便會去查看INSTALLD_APPS下包含的所有app目錄中的tasks.py文件,找到標記為task的方法,將它們注冊為celery task。BROKER_URL和CELERY_RESULT_BACKEND分別指代你的Broker的代理地址以及Backend(result store)數據存儲地址。在Django中如果沒有設置backend,會使用其默認的后臺數據庫用來存儲數據。注意,此處backend的設置是通過關鍵字CELERY_RESULT_BACKEND來配置,與一般的.py文件中實現(xiàn)celery的backend設置方式有所不同。一般的.py中是直接通過設置backend關鍵字來配置,如下所示:

app = Celery('tasks', backend='amqp://guest@localhost//', broker='amqp://guest@localhost//')

然后,在INSTALLED_APPS中加入djcelery:

INSTALLED_APPS = (
  ……  
  'qv',
  'djcelery'
  ……  
)  

4. 在要使用該任務隊列的app根目錄下(比如qv),建立tasks.py,比如:

在tasks.py中我們就可以編碼實現(xiàn)我們需要執(zhí)行的任務邏輯,在開始處import task,然后在要執(zhí)行的任務方法開頭用上裝飾器@task。需要注意的是,與一般的.py中實現(xiàn)celery不同,tasks.py必須建在各app的根目錄下,且不能隨意命名。

5. 生產任務

在需要執(zhí)行該任務的View中,通過build_job.delay的方式來創(chuàng)建任務,并送入消息隊列。比如:

6. 啟動worker的命令

#先啟動服務器
python manage.py runserver
#再啟動worker 
python manage.py celery worker -c 4 --loglevel=info

四、補充

Django下要查看其他celery的命令,包括參數配置、啟動多worker進程的方式都可以通過python manage.py celery --help來查看:

另外,Celery提供了一個工具flower,將各個任務的執(zhí)行情況、各個worker的健康狀態(tài)進行監(jiān)控并以可視化的方式展現(xiàn),如下圖所示:

Django下實現(xiàn)的方式如下: 

1. 安裝flower:

pip install flower

2. 啟動flower(默認會啟動一個webserver,端口為5555):

python manage.py celery flower

3. 進入http://localhost:5555即可查看。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python獲取excel內容及相關操作代碼實例

    Python獲取excel內容及相關操作代碼實例

    這篇文章主要介紹了Python獲取excel內容及相關操作代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 探索Python3.4中新引入的asyncio模塊

    探索Python3.4中新引入的asyncio模塊

    這篇文章主要介紹了Python3.4中新引入的asyncio模塊,包括其對端口和服務器等的操作,需要的朋友可以參考下
    2015-04-04
  • Python?if?判斷語句詳解

    Python?if?判斷語句詳解

    這篇文章主要介紹了Python?if?判斷語句,包括流程控制,順序結構和分支結構,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • GIt在pyCharm的詳細使用教程記錄

    GIt在pyCharm的詳細使用教程記錄

    使用git+pycharm有一段時間了,算是稍有點心得,所以下面這篇文章主要給大家介紹了關于GIt在pyCharm的詳細使用的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • FFT快速傅里葉變換的python實現(xiàn)過程解析

    FFT快速傅里葉變換的python實現(xiàn)過程解析

    這篇文章主要介紹了FFT快速傅里葉變換的python實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Python中使用PIL庫實現(xiàn)圖片高斯模糊實例

    Python中使用PIL庫實現(xiàn)圖片高斯模糊實例

    這篇文章主要介紹了Python中使用PIL庫實現(xiàn)圖片高斯模糊實例,本文重點在修改了Pil的源碼實現(xiàn)可以自定義模糊度,需要的朋友可以參考下
    2015-02-02
  • Python代碼的打包與發(fā)布詳解

    Python代碼的打包與發(fā)布詳解

    這篇文章主要介紹了Python代碼的打包與發(fā)布的方法,需要的朋友可以參考下
    2014-07-07
  • Python Traceback異常代碼排錯利器使用指南

    Python Traceback異常代碼排錯利器使用指南

    這篇文章主要為大家介紹了Python Traceback異常代碼排錯利器使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • python如何調用百度識圖api

    python如何調用百度識圖api

    這篇文章主要介紹了python如何調用百度識圖api,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python使用pyinstaller打包成.exe文件執(zhí)行后閃退的圖文解決辦法

    Python使用pyinstaller打包成.exe文件執(zhí)行后閃退的圖文解決辦法

    這篇文章主要給大家介紹了關于Python使用pyinstaller打包成.exe文件執(zhí)行后閃退的圖文解決辦法,閃退問題通常是由于程序運行過程中出現(xiàn)了未處理的異?;蝈e誤,導致程序崩潰,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論