celery:
使用場景:
主要用於做異步
1. 解決一些耗時的操作(在原進程繼續執行的情況下,開一個新的進程運行比較耗時的程序,讓celery去做耗時的事情,給用戶一個快速地響應,跑完給一個信號就可以了,不需要讓用戶等太長時間)
2. 定時執行某些任務 (網站天氣定時的更新)
celery中的名詞:
任務task: 就是一個python函數(要執行的耗時操作)
隊列queue: 將需要執行的任務加入到隊列中
工人worker: 開一個新的進程中,負責執行隊列中的任務
代理人borker: 負責調度,將任務加入到隊列queue中, 在佈置環境中一般使用redis
安裝celery包:
celery==3.1.25
celery-with-redis==3.0
djagno-celery==3.1.17
在django的setting文件中添加app:
INSTALLED_APPS = [
...
"djcelery",
]
同時在setting的末尾追加:
import djcelery
djcelery.setup_loader() 負責將任務加入隊列
BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_IMPORTS = ('應用名稱.task')
然後在自己定義的應用的下面創建一個task.py文件,用於放置需要異步執行的任務,比如定義函數
遷移生成celery需要的數據表
python manage.py migrate
啓動Redis:
sudo redis-server /etc/redis/redis.conf
啓動worker:
python manage.py celery worker --loglevel=info
然後寫視圖函數和路由
調用語法:
在視圖函數中使用函數名.delay(如果有參數寫這裏)進行異步調用
請求比較耗時一般有兩種解決方案:
1. 設緩存,有些東西不能設置緩存,比如定時刷新天氣
2. 使用celery實現異步celery