Django 初步使用 Celery

有時候我們?Django?的視圖中會有一些執(zhí)行比較耗時的任務(wù)(例如收發(fā)郵件)?和?后臺任務(wù)(例如爬蟲和更新服務(wù)器緩存).

Celery?是 Python?開發(fā)分布式任務(wù)列隊的處理庫. 可以異步分布式地異步處理任務(wù),?也可定時執(zhí)行任務(wù)等等.下面介紹一個 Celery的簡單案例.

Celery?方式的選擇.

這里 Celery?的中間人,?我采用 Redis.?安裝 Redis.

這里還需要安裝 celery-with-redis --> pip install celery-with-redis.

該命令會自動安裝 redis(python庫)、celery、kombu、billiard、amqp、vine和celery-with-redis相關(guān)庫.?這里安裝的 redis?是 python?操作 redis?的庫,?非 redis?庫. redis?數(shù)據(jù)庫需要獨立安裝.


為了測試, views.py?寫了一個耗時方法,?和一個響應(yīng) json?方法.

編寫對應(yīng)路由訪問 index?視圖?看一下響應(yīng)速度.?中間有個10秒等待.

注:?這邊 Student.objects.values()?得到的是一個類字典查詢集類,?你要把他轉(zhuǎn)化成字典列表才能進行 json.dumps()?操作進而轉(zhuǎn)化成字符串在瀏覽器格式化輸出.

下面的 celery?版本是 3.1.25? ? celery 4.x可能不同.

打開 settings.py?所在文件夾,?新建 celery.py?文件.

這個文件還沒被加載,?接著打開 settings.py?同目錄下的 __init__.py 文件.?讓運行該 Django?項目的時候,?加載改文件配置 Celery.

還需在 settings.py?中設(shè)置 celery,?尤其是中間人的設(shè)置.?若不設(shè)置中間人,會提示無法連接中間人的錯誤.?

把耗時任務(wù)丟給 celery?去處理.

上面的 views.py?有個耗時任務(wù) send.?在 myapp?應(yīng)用下新建 task.py?文件,?將 send?方法剪切到該文件中并定義為 celery?任務(wù).

在原有的方法上加上 celery?裝飾器 task.?也可以通過前面添加的 celery_app?給 send?方法加裝飾器。 (views.py?文件中)

原來的 index 視圖函數(shù)修改為:

本地啟動 celery?并測試.

啟動 celery?之前,?確保已經(jīng)安裝 redis?并啟動 redis?服務(wù).?

redis?安裝過程 : -->?http://yshblog.com/blog/155

接著,?啟動 celery worker.?這個 worker?是用于異步執(zhí)行任務(wù)的 "工作者".?進去 manage.py?文件所在目錄,?執(zhí)行如下命令:

Celery -A myproject(項目名) worker -l(英文字母L的小寫) info

在啟動 Django?服務(wù)器 python manage.py runserver?看一下響應(yīng)時間.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容