Celery詳解
除了redis,還可以使用另外一個神器----Celery。Celery是一個異步任務的調度工具。
Celery是Distributed Task Queue,分布式任務隊列,分布式決定了可以有多個worker的存在,列表表示其是異步操作,即存在一個產生任務提出需求的工頭,和一群等著被分配工作的碼農。
在python中定義Celery的時候,我們要引入Broker,中文翻譯過來就是"中間人"的意思,在這裏Broker起到一個中間人的角色,在工頭提出任務的時候,把所有的任務放到Broker裏面,在Broker的另一頭,一群碼農等著取出一個個任務準備著手做。
這種模式註定了整個系統會是個開環系統,工頭對於碼農們把任務做的怎樣是不知情的,所以我們要引入Backend來保存每次任務的結果。這個Backend有點像我們的Broker,也是存儲信息用的,只不過這裏存的是那些任務的返回結果。我們可以選擇只讓錯誤執行的任務返回結果到Backend,這樣我們取回結果,便可以知道有多少任務執行失敗了。
Celery 介紹
在Celery中幾個基本的概念,需要先了解下,不然不知道為什麽要安裝下面的東西。概念:Broker,Backend。
Broker:
broker是一個消息傳輸的中間件,可以理解為一個郵箱。每當應用程序調用celery的異步任務的時候,會向broker傳遞消息,而後celery的worker將會取到消息,進行程序執行,好吧,這個郵箱可以看成是一個消息隊列,其中Broker的中文意思是經紀人,其實就是一開始說的消息隊列,用來發送和接受信息。這個broker有幾個方案可供選擇:RabbitMQ(消息隊列),Redis(緩存數據庫),數據庫(不推薦),等等
什麽是backend?
通常程序發送的消息,發完就完了,可能都不知道對方什麽時候接受了,為此,celery實現了一個backend,用於存儲這些消息以及celery執行的一些消息和結果,Backend是在Celery的配置中的一個配置項CELERY_RESULT_BACKEND,作用是保存結果和狀態,如果你需要跟蹤任務的狀態,那麽需要設置這一項,可以是Database backend,也可以是Cache backend.
對於brokers,官方推薦是rabbitmq和redis,至於backend,就是數據庫,為了簡單可以都使用redis。
Celery的架構由三部分組成,消息中間件(message broker),任務執行單元(worker)和任務執行結果存儲(task result store)組成。
消息中間件
Celery本身不提供消息服務,但是可以方便的和第三方提供的消息中間件集成,包括,RabbitMQ,Redis,MongoDB..............
任務執行單元
Worker是celery提供的任務執行的單元,worker並發的運行在分布式的系統節點中。
任務結果存儲
Task result store用來存儲Worker執行的任務的結果,Celery支持以不同方式存儲任務的結果,包括AMQP,redis,memcached,mongodb,SQLAlchemy,Django
安裝Redis,它的安裝比較簡單:
然後進行配置,一般都在項目的config.py文件裏配置:
URL的格式為:
redis://:password@hostname:port/db_number
URL Scheme後的所有字段都是可選的,並且默認為localhost的6479端口,使用數據庫0。我的配置是:
redis://:password@ubuntu:6379/5
安裝Celery,我是用標準的Python工具pip安裝的,如下:
Celery詳解