基本概念:Broker, Backendredis
什麼是broker?mongodb
broker是一個消息傳輸的中間件,能夠理解爲一個隊列。每當應用程序調用celery的異步任務的時候,會向broker傳遞消息,然後celery的worker將會取到消息,進行對應的程序執行。
Broker的中文意思是‘經紀人’,其實就是‘消息隊列’,用來發送和接受消息。
Broker有幾個方案可供選擇:RabbitMQ,Redis,數據庫(不推薦),等等。數據庫
什麼是backend?架構
異步程序的一個重大問題是怎麼保證結果返回對應的處理機。
backend用於存儲處理機的相關信息及執行的信息。
Backend是在Celery的配置中的一個配置項 CELERY_RESULT_BACKEND ,做用是保存結果和狀態,若是須要跟蹤任務的狀態,那麼須要設置這一項,能夠是Database backend,也能夠是Cache backend,具體能夠參考這裏: CELERY_RESULT_BACKEND 。併發
對於 brokers,官方推薦是 rabbitmq 和 redis,至於 backend,就是數據庫。爲了簡單能夠都使用 redis。異步
Celery的架構由三部分組成,消息中間件(message broker),任務執行單元(worker)和任務執行結果存儲(task result store)組成。async
消息中間件
Celery自己不提供消息服務,可是能夠方便的和第三方提供的消息中間件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ分佈式
任務執行單元
Worker是Celery提供的任務執行的單元,worker併發的運行在分佈式的系統節點中。memcached
任務結果存儲
Task result store用來存儲Worker執行的任務的結果,Celery支持以不一樣方式存儲任務的結果,包括AMQP, redis,memcached, mongodb,SQLAlchemy, Django ORM,Apache Cassandra, IronCache 等。中間件
beat
其實還有一個組件beat,worker能夠視爲twisted的循環,只負責從隊列中取任務、執行、返回結果;
若是不主動向任務隊列添加任務worker會空閒;
添加任務有兩種方式:
delay是一次性添加任務也就是async task;
beat負責週期性的向任務隊列中添加任務;
架構圖:
pip install celery