python celery应用场景_Celery使用背景与功能概要
Celery使用背景與功能概要
2018-03-28T00:35:49
532
0
0
#### Celery是Python開發的分布式任務調度模塊。
#### 本系列文章將詳細講解Celery的各種功能。
#### 本文首先講解一下Celery使用背景與功能概要。
## 任務隊列的應用場景
在 Web2.0 后的時代,社交網站、搜索引擎的的迅猛發展對 Web 服務的后臺管理系統提出了更高的需求。
考慮幾個常見的使用場景:
- 社交網站的用戶在其主頁發布了一組新的照片,這條新鮮事需要適時地推送至該用戶的所有好友。該網站的活躍用戶有千萬級別,在同一時刻會有非常多的“新鮮事推送”任務需要處理,并且每個用戶的好友數會達到 1000+的級別。出于用戶體驗的考慮,用戶發布照片的這個操作需要在較短時間內得到反饋。
- 在文獻搜索系統的主頁,用戶可以查到當前一小時內最熱門的十大文獻,并且能夠直接訪問該文獻。該文獻管理系統所管理的文獻數量非常多,達到 PB 的級別。處于用戶體驗的考慮,用戶獲得十大熱門文獻這個動作需要在較短時間內獲得反饋。
考慮對于高并發大用戶量的 Web 服務系統,對于場景一和場景二中的需求,如果在請求處理周期內完成這些任務,然后再返回結果,這種傳統的做法會導致用戶等待的時間過長。同時 Web 服務管理后臺對任務處理能力也缺乏擴展性。
在這些場景下,任務隊列是有效的解決方案。
在一個任務隊列系統中,“將新鮮事推送至用戶A的所有好友”或者“查詢當前最熱門的十大文獻”這種查詢或者計算工作可以被當成一個“任務”。
在任務隊列系統中,一般有任務生產者、任務處理中間方以及任務處理者三方。
- 任務生產者負責創建任務,比如“將新鮮事推送至用戶A的所有好友”這一任務的發起方就可以稱作任務生產者。
- 任務處理中間方負責接收任務生產者的任務處理請求,對任務進行調度,最后將任務分發給任務處理者來進行處理。
- 任務處理者就是執行任務的一方,它負責接收任務處理中間方發來的任務處理請求,完成這些任務,并且返回任務處理的結果。
在生產方、消費者和任務處理中間方之間一般使用消息傳遞的方式來進行通信。
在任務隊列系統框架中,任務處理者可以跨越不同的服務節點,可以動態地增加節點來增加系統的任務處理能力,非常適合高并發、需要橫向擴展的 Web 服務后臺。
## 什么是Celery?
Celery是基于Python語言的開源分布式任務調度模塊。
它有著簡明的 API,并且有豐富的擴展性,適合用于構建分布式的Web服務。
Celery的結構圖如下:

在上圖中,一共可以分為五個部分:
- application(任務生產者)
- celery beat(定時任務處觸發)
- broker(任務隊列)
- workers(任務處理者)
- result store(運行結果存儲)
下面,我們依次來了解這五個部分的作用:
**任務生產者 (task producer)**
任務生產者 (task producer) 負責產生計算任務,交給任務隊列去處理。
在 Celery 里,一段獨立的 Python 代碼、一段嵌入在 Django Web 服務里的一段請求處理邏輯,只要是調用了 Celery 提供的 API,產生任務并交給任務隊列處理的,我們都可以稱之為任務生產者。
**任務調度器 (celery beat)**
Celery beat 是一個任務調度器,它以獨立進程的形式存在。
Celery beat 進程會讀取配置文件的內容,周期性地將執行任務的請求發送給任務隊列。
Celery beat 是 Celery系統自帶的任務生產者。
系統管理員可以選擇關閉或者開啟 Celery beat。
同時在一個 Celery 系統中,只能存在一個Celery beat調度器。
**任務代理 (broker)**
任務代理方負責接受任務生產者發送過來的任務處理消息,存進隊列之后再進行調度,分發給任務消費方 (celery worker)。
因為任務處理是基于 message(消息) 的,所以我們一般選擇 RabbitMQ、Redis 等消息隊列或者數據庫作為 Celery 的 message broker。
**任務消費方 (celery worker)**
Celery worker 就是執行任務的一方,它負責接收任務處理中間方發來的任務處理請求,完成這些任務,并且返回任務處理的結果。
Celery worker 對應的就是操作系統中的一個進程。
Celery 支持分布式部署和橫向擴展,我們可以在多個節點增加 Celery worker 的數量來增加系統的高可用性。
在分布式系統中,我們也可以在不同節點上分配執行不同任務的 Celery worker 來達到模塊化的目的。
**結果保存**
Celery 支持任務處理完后將狀態信息和結果的保存,以供查詢。
Celery 內置支持 rpc, Django ORM,Redis,RabbitMQ 等方式來保存任務處理后的狀態信息。
在下一篇文章中,我們將會用一個簡答的Demo來對Celery有一個初步的了解。
0條評論
評論前請先登錄
登錄
注冊
發表回復
總結
以上是生活随笔為你收集整理的python celery应用场景_Celery使用背景与功能概要的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch安装教程(Windows版
- 下一篇: 基于ISM的大数据在建筑领域中的应用障碍