原文出處: 異步任務神器 Celery 簡明筆記
參考文章: Celery 框架學習筆記html
在程序的運行過程當中,咱們常常會碰到一些耗時耗資源的操做,爲了不它們阻塞主程序的運行,咱們常常會採用多線程或異步任務。好比,在 Web 開發中,對新用戶的註冊,咱們一般會給他發一封激活郵件,而發郵件是個 IO 阻塞式任務,若是直接把它放到應用當中,就須要等郵件發出去以後才能進行下一步操做,此時用戶只能等待再等待。更好的方式是在業務邏輯中觸發一個發郵件的異步任務,而主程序能夠繼續往下運行。多線程
Celery 是一個強大的分佈式任務隊列,它可讓任務的執行徹底脫離主程序,甚至能夠被分配到其餘主機上運行。咱們一般使用它來實現異步任務(async task)和定時任務(crontab)。它的架構組成以下圖:
架構
能夠看到,Celery 主要包含如下幾個模塊:併發
任務模塊 Task包含異步任務和定時任務。其中,異步任務一般在業務邏輯中被觸發併發往任務隊列,而定時任務由 Celery Beat 進程週期性地將任務發往任務隊列。框架
消息中間件 BrokerBroker,即爲任務調度隊列,接收任務生產者發來的消息(即任務),將任務存入隊列。Celery 自己不提供隊列服務,官方推薦使用 RabbitMQ 和 Redis 等。異步
任務執行單元 WorkerWorker 是執行任務的處理單元,它實時監控消息隊列,獲取隊列中調度的任務,並執行它。async
任務結果存儲 BackendBackend 用於存儲任務的執行結果,以供查詢。同消息中間件同樣,存儲也可以使用 RabbitMQ, Redis 和 MongoDB 等。分佈式