flask celery 使用方法
一、安裝
由於celery4.0不支持window,如果在window上安裝celery4.0將會出現下面的錯誤
你現在只能安裝
pip install celery==3.1
二、安裝py for redis 模塊
pip install redis
三、安裝redis服務
網上很多文章都寫得模棱兩可,把人坑的不要不要的!!!
Redis對於Linux是官方支持的,但是不支持window,網上很多作者寫文章都不寫具體的系統環境,大多數直接說pip install redis
就可以使用redis了,真的是坑人的玩意,本人深受其毒害
對於windows,如果你需要使用redis服務,那麽進入該地址下載
redis安裝包,雙擊完成就可以了
如果你在window上不安裝該redis包,將會提示redis.exceptions.ConnectionError: Error 10061 connecting to localhost:6379.
或者redis.exceptions.ConnectionError
需要註意是:安裝目錄不能安裝在C盤,否則會出現權限依賴錯誤
四、添加redis環境變量
D:\Program Files\Redis
五、初始化redis
進入redis安裝目錄,打開cmd運行命令redis-server.exe redis.windows.conf
- 雙擊目錄下的
redis-cli.exe
- 在出現的窗口中輸入
shutdown
- 繼續輸入
exit
六、lask 集成celyer
在Flask配置中添加配置
1 |
# Celery 配置 |
- 在flask工程的
__init__
目錄下生產celery實例
註意!!以下代碼必須在 flask app讀取完配置文件後編寫,否則會報錯
1 |
def make_celery(app): |
完整示例如下
1 |
app = Flask(__name__) |
在cmd中啟動celery服務
執行命令celery -A your_application.celery worker loglevel=info,your_application為你工程的名字,在這裏為 get_tieba_film
調用
1 |
@app.route(‘/‘) |
綁定
一個綁定任務意味著任務函數的第一個參數總是任務實例本身(self),就像 Python 綁定方法類似:
1 |
|
任務繼承
任務裝飾器的 base 參數可以聲明任務的基類
1 |
import celery |
任務名稱
每個任務必須有不同的名稱。
如果沒有顯示提供名稱,任務裝飾器將會自動產生一個,產生的名稱會基於這些信息:
1)任務定義所在的模塊,
2)任務函數的名稱
顯示設置任務名稱的例子:
1 |
>>> @app.task(name=‘sum-of-two-numbers‘) |
最佳實踐是使用模塊名稱作為命名空間,這樣的話如果有一個同名任務函數定義在其他模塊也不會產生沖突。
1 |
>>> @app.task(name=‘tasks.add‘) |
七、安裝flower
將各個任務的執行情況、各個worker的健康狀態進行監控並以可視化的方式展現
1
|
pip install flower
|
啟動flower(默認會啟動一個webserver,端口為5555):
1
|
celery flower --address=127.0.0.1 --port=5555
|
進入http://localhost:5555即可查看。
doc
八、常見錯誤
1
|
ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0:
|
原因是:redis-server 沒有啟動
解決方案:到redis安裝目錄下執行redis-server.exe redis.windows.conf
檢查redis是否啟動:redis-cli ping
1
|
line 442, in on_task_received
|
解決:
1 |
Did you remember to import the module containing this task? |
原因:任務沒有註冊或註冊不成功,只有在啟動的時候提示有任務的時候,才能使用該任務
解決:
- 你在那個類中使用celery就在哪個類中執行
celery -A 包名.類名.celery worker -l info
- 根據上一部提示的任務列表給任務設置對應的名稱
如在Test中
1 |
from main import app, celery |
目錄結構:
1 |
+ Card # 工程 |
則應該啟動的命令為:
1
|
celery -A main.Test.celery worker -l info
|
同時,如果你的Task.py也有任務,那麽你還應該重新創建一個cmd窗口執行
1
|
celery -A main.admin.Task.celery worker -l info
|
celery的工作進程可以創建多個
參考鏈接
轉自:https://www.laoyuyu.me/2018/02/10/python_flask_celery/
celery用戶指南,強烈推薦看
redis安裝
celery使用
https://redis.io/topics/quickstart
flask celery 使用方法