異步操作Celery的實現


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章