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

首頁 > 編程 > Python > 正文

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

2020-02-15 21:40:33
字體:
來源:轉載
供稿:網友

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

一、Django中的異步請求

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

圖1. Django架構總覽

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

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

二、關于Celery

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

圖2. Celery架構

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

三、Django中Celery的實現

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

1. 建立消息隊列

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

sudo apt-get install rabbitmq-server            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静安区| 溆浦县| 黑水县| 浦北县| 洛浦县| 辛集市| 双鸭山市| 垣曲县| 高邮市| 宁阳县| 六安市| 宁强县| 贺州市| 阿尔山市| 洱源县| 耒阳市| 雷山县| 平乡县| 三亚市| 太康县| 土默特左旗| 义马市| 漯河市| 恩施市| 九龙坡区| 津南区| 田林县| 宜都市| 商河县| 锡林浩特市| 毕节市| 平乐县| 辽中县| 海林市| 梁河县| 东城区| 迁安市| 房产| 侯马市| 湛江市| 金堂县|