0. celery整體邏輯圖
個人理解為:此處的客戶端client與以往定義的客戶端(前端)并不一樣,角色相當于以往的后端邏輯處理代碼,即發布任務的一方,只是相當于處理者worker而言是客戶端。
1.準備工作:
1)python manage.py runserver 運行服務代碼,此步驟對應于開啟客戶端的程序,監聽用戶發送短信指令的行為。
2)celery -A ihome.task.main worker -l info 此指令是真正執行異步發送短信的代碼,指令中main 指的是處理者worker的啟動文件main.py,-l info指的是日志等級。
2.過程總結:
1)用戶在登錄界面輸入手機號以及圖片驗證碼,并點擊獲取驗證碼;
此時調用后端api中相關邏輯處理函數get_sms_code(mobile);
get_sms_code函數中調用celery,使用send_sms.delay()異步發送短信,客戶端監聽到此指令。
上圖中之所以單獨為worker創建一個文件夾sms,是因為實際項目中,會有多個tasks,通常每個task建立一個文件,目錄和sms平級。
2)接下來,客戶端將發送短信的指令send_sms保存任務隊列broker中,即redis中的1號數據庫。
3)接下來,真正的worker從broker中取出任務,并通過啟動文件main.py中的配置的路徑,自動**搜尋(autodiscover)**相應路徑下具有真實操作邏輯函數的send_sms函數,即真正操作發送短信的worker,并執行相關動作。