1. 程式人生 > >python celery 模塊

python celery 模塊

test pla 需要 app result 正則 無需 邏輯 mark

Celery是基於Python開發的一個分布式任務隊列框架,支持使用任務隊列的方式在分布的機器/進程/線程上執行任務調度
技術分享圖片
Celery是典型的生產生-消費者模式,主要由三部分組成:broker(消息隊列)、workers(消費者:處理任務)、backend(存儲結果)


django + celery 實現任務的異步處理
1.Django Web中從一個http請求發起,到獲得響應返回html頁面的流程大致如下:http請求發起 -- http handling(request解析) -- url mapping(url正則匹配找到對應的View) -- 在View中進行邏輯的處理、數據計算(包括調用Model類進行數據庫的增刪改查)--將數據推送到template,返回對應的template/response

同步請求:所有邏輯處理、數據計算任務在View中處理完畢後返回response。在View處理任務時用戶處於等待狀態,直到頁面返回結果
異步請求:View中先返回response,再在後臺處理任務。用戶無需等待,可以繼續瀏覽網站。當任務處理完成時,我們可以再告知用戶
2.建立消息隊列
消息隊列可以使用RabbitMQ、Redis 等
3.安裝django-celery
pip install celery django-celery
4.配置settings.py
import djcelery
djcelery.setup_loader()
BROKER_URL= ‘amqp://guest@localhost//‘
CELERY_RESULT_BACKEND = ‘amqp://guest@localhost//‘
其中,當djcelery.setup_loader()運行時,Celery便會去查看INSTALLD_APPS下包含的所有app目錄中的tasks.py文件,找到標記為task的方法,將它們註冊為celery task
5.在要使用該任務隊列的app根目錄下(比如qv),建立tasks.py
from celery import task@task
br/>@task
result = int(x) + int(y)
return result

在tasks.py中我們就可以編碼實現我們需要執行的任務邏輯,在開始處import task,然後在要執行的任務方法開頭用上裝飾器@task。需要註意的是,與一般的.py中實現celery不同,tasks.py必須建在各app的根目錄下,且不能隨意命名

6.生產任務
在需要執行該任務的View中,通過test.delay的方式來創建任務,並送入消息隊列
def produce():
a =1
b =2
r = test.delay(a,b)
7.啟動work
#先啟動服務器 python manage.py runserver
#再啟動worker python manage.py celery worker -c 4 --loglevel=info

python celery 模塊