簡單介紹一下celery:celery 是乙個非同步任務佇列。你可以使用它在你的應用上下文之外執行任務。總的想法就是你的應用程式可能需要執行任何消耗資源的任務都可以交給任務佇列,讓你的應用程式自由和快速地響應客戶端請求。
官方文件:
中文文件:
flask 中使用 celery:
**別人寫的,大家可以參考著來:
因為以下操作在flask中執行,根據網上說的,celery最新版不支援windows系統,所以我這邊安裝的是v3.0版本,最新版還未嘗試,感興趣的同學可以自行操作一番。
中間人採用的是redis,這裡選擇低版本的redis安裝使用,不然會報乙個不相容的錯誤。
# 推薦使用國內映象源安裝
pip install flask
pip install celery==3.1.25
pip install redis==2.10.6
當安裝上面的包後,我們先在最基礎的flask框架下試一下,能否啟動成功。
from flask import flask
def hello_world():
return 'hello world!'
if __name__ == '__main__':
import time
from flask import flask
from celery import celery
# 這裡是配置中間人redis基礎寫法,可以照抄。如果是伺服器,需要更換(127.0.0.1)
# 初始化celery
def hello_world():
return 'hello world!'
# 這裡定義後台任務,非同步執行裝飾器@celery_.task
@celery_.task
def my_background_task(arg1):
# some long running task here
time.sleep(5)
result = arg1
print(result.id)
return result
# 以下是兩個檢視,測試celery能否正常使用
def index():
"""乙個測試的例項"""
# print(my_background_task(3)) # add函式也能做普通的函式使用
return result.id
def get_result(result_id):
# 根據任務id獲取任務結果
print(result_id)
# 這裡請注意,網上很多教程只有「asyncresult」,但這是不對的
# 這裡要呼叫的是例項化後的celery的物件方法才行,如果不是這樣,啟動celery服務後會報乙個配置後端錯誤
result = celery_.asyncresult(id=result_id)
print(result)
return str(result.get())
if __name__ == '__main__':
我們嘗試在pycharm的視窗下執行命令
注意,一下視窗是另起的乙個視窗用來啟動celery服務。
可以通過訪問檢視
"""加法
:param x:
:param y:
:return:
"""time.sleep(10)
return str(x + y)
from flask import flask
from celery_task import celery
"""建立flask應用物件
:param config_name: str 配置模式的模式名字 (「develop」,「product」)
:return:
""""""
"""# .........
以上的方式是為了解決迴圈匯入的問題,如果大家有更好的方案,可以優化一下。
接下來的啟動方式與上面一樣,開兩個視窗,乙個啟動flask專案,乙個啟動celery服務。
!!!注意!!!
工廠模式與抽象工廠模式
原始出處 作者資訊和本宣告。否則將追究法律責任。工廠模式與抽象工廠模式,相信同行不會陌生 在網上及相關書裡面也看過這方面的介紹 推薦這兩本書 steven john metsker s design patterns in c 和 gof s design pattern framework2.0 ...
工廠模式與抽象工廠模式
1 工廠模式 定義了一組建立物件的介面,但是由子類決定要例項化的類是哪乙個。工廠方法把類的例項化推遲到子類中。現在考慮有pizzastore有一些子類 加盟店 他們有可能對pizza的做法進行一些改良,即createpizza方法需要公升級。工廠方法的做法是,在基類中建立乙個形為abstract p...
工廠模式與靜態工廠
1 工廠方法模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。2...