略過
pip install celery==3.1.18celery4不再支援windows,所以在windows環境下使用請選擇celery==3.1.18
celery需要一種解決訊息的傳送和接受的方式,我們把這種用來儲存訊息的的中間裝置叫做message broker, 也可叫做訊息中間人。 作為中間人,我們有幾種方案可選擇:
如果我們使用的是ubuntu或者debian發行版的linux,可以直接通過下面的命令安裝rabbitmq: sudo apt-get install rabbitmq-server 安裝完畢之後,rabbitmq-server伺服器就已經在後台執行。如果您用的並不是ubuntu或debian, 可以在以下**: 去查詢自己所需要的版本軟體。
redis也是一款功能完備的broker可選項,但是其更可能因意外中斷或者電源故障導致資料丟失的情況。 關於使用哪個redis作為broker,可訪下面**:
本次使用redis作為broker
pip install redis==2.10.6redis使用2.10.6版本,之前用最新的3.5.3會出錯
在上面建立的tasks.py模組中寫入如下:
import在專案根目錄下執行:random
from time import
sleep
from celery import
celery
#我們這裡案例使用redis作為broker,和資料儲存
broker = '
redis:
'backend = '
redis:
'demo
', broker=broker, backend=backend)
#def
my_task(a, b):
print("
開始執行任務了,代號:{},結果為:{}
".format(random.randint(1, 100), a+b))
sleep(15)
print("
非同步任務執行完成")
return a+b
啟動好了之後最下方顯示如下,太長沒有截全
後續測試發現任務已經執行,但是狀態一直是pending,且redis中也沒有寫入return的結果。----這種現象好像是windows才會有linux正常
解決辦法:引數後加上--pool=solo
任務加入到broker佇列中,以便剛才我們建立的celery worker伺服器能夠從佇列中取出任務並執行。
如何將任務函式加入到佇列中,可使用delay()。
可以看到已經可以獲取任務的結果了。
可以看到celery worker伺服器從佇列中取出任務並執行,且redis中也已儲存task的返回值
pip install flower啟動flower,指定broker
celery flower --broker=redis://localhost:6379/2啟動好了如下:
訪問:檢視task:
參考:
django中使用celery 一
建立django專案celery demo,建立應用demo 在celery demo模組中建立celery.py模組,檔案目錄為 celery.py模組內容為 from celery import celery from django.conf import settings import os ...
django中使用celery及gevent
celery是分布式非同步任務佇列,通過在django中整合celery任務,可實現工作流的定製 非同步執行i o工作量大的任務 定時任務。下面的例子,給出了定時任務的實現過程。原始碼 django admin startproject mysite在mysite下建立poll應用 2 建立後mys...
Celery在Django中的使用
celery 是乙個強大的分布式任務佇列,它可以讓任務的執行完全脫離主程式,甚至可以被分配到其他主機上執行。我們通常使用它來實現非同步任務 async task 和定時任務 crontab 非同步任務 比如傳送郵件 手機驗證碼,或者檔案上傳,影象處理等等一些比較耗時的操作 定時任務 需要在特定時間執...