celery非同步任務
阿新 • • 發佈:2020-12-09
celery非同步任務
1.安裝相關包 與 管理命令
pip3 install Django==2.0.4
pip3 install celery==4.3.0
pip3 install redis==3.2.1 #必須是3.2.1不可以低
pip3 install django-celery==3.1.17
pip3 install ipython==7.6.1
find ./ -type f | xargs sed -i 's/\r$//g' # 批量將當前資料夾下所有檔案裝換成unix格式
2.celery在專案中測試
我們建立一個celery_task的python包 在包中建立一個mian.py的檔案
import os, sys
from celery import Celery
# 定義celery例項, 需要的引數, 1, 例項名, 2, 任務釋出位置, 3, 結果儲存位置
app = Celery('mycelery',
broker='redis://127.0.0.1:6379/14', # 任務存放的地方
backend='redis://127.0.0.1:6379/15') # 結果存放的地方
@app.task
def add(x, y):
return x + y
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
下面我們開啟終端測試一下程式碼,檢視add是否可以非同步計算。
1.進入celery_task資料夾中。
1、啟動Celery Worker來開始監聽並執行任務
celery -A main worker --loglevel=info
main是tasks.py檔案:必須在tasks.py所在目錄下執行
2、呼叫任務:再開啟兩個終端,進行命令列模式,呼叫任務
import main
t2 = main.add.delay(9,11)
#然後在另一個終端重複上面步驟執行
t1 = tasks.add.delay(3,4)
t1.get() #由於t2執行sleep了3s所以t1.get()需要等待
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
現在我們可以清晰的看的執行函式在另一個終端中把計算結果計算出來了。現在我們已經實現了非同步了。
注意:celery非同步執行必須加delay() 否則根本不會非同步執行
管理命令:專案中啟動和關閉celery worker
#單執行緒啟動celery
celery multi start w1 w2 -A celery_pro -l info #一次性啟動w1,w2兩個worker
celery -A celery_pro status #檢視當前有哪些worker在執行
celery multi stop w1 w2 -A celery_pro #停止w1,w2兩個worker
find ./ -type f | xargs sed -i 's/\r$//g' # 批量將當前資料夾下所有檔案裝換成unix格式
# celery併發數:最多50個,最少5個
celery multi start celery_test -A celery_test -l debug --autoscale=50,5
http://docs.celeryproject.org/en/latest/reference/celery.bin.worker.html#cmdoption-celery-worker-autoscale
ps auxww|grep "celery worker"|grep -v grep|awk '{print $2}'|xargs kill -9 # 關閉所有celery程序