消息隊(duì)列是網(wǎng)站架構(gòu)中常用的組件晌纫,在異步任務(wù)税迷、高并發(fā)等場(chǎng)景下使用廣泛,celery是py下常用的消息隊(duì)列锹漱,最近有一個(gè)異步計(jì)算需求箭养,正好來學(xué)習(xí)一下celery的基本用法。
開發(fā)環(huán)境為window10哥牍、python3.6
首先安裝celery毕泌,我們這里使用redis作為消息中間件
pip install celery[redis]
一共需要編寫兩個(gè)文件,一個(gè)任務(wù)(生產(chǎn)者)文件嗅辣,一個(gè)生產(chǎn)者文件撼泛。
編寫一個(gè)簡(jiǎn)單的任務(wù)文件celery_demo01.py,兩個(gè)數(shù)相加澡谭,并加入sleep查看效果
# coding=utf-8
import time
from celery import Celery
broker = 'redis://localhost:6379/1'
backend = 'redis://localhost:6379/2'
app = Celery('demo01', broker=broker, backend=backend)
@app.task
def add(x, y):
print("enter call func")
time.sleep(5)
return x + y
編寫生產(chǎn)者文件app.py
# coding=utf-8
from celery_demo01 import add
if __name__ == "__main__":
print("start")
result = add.delay(2,8)
print("end")
print(result)
現(xiàn)在開始測(cè)試
2.進(jìn)入工程目錄愿题,輸入命令,啟動(dòng)worker
celery worker -A celery_demo01 -l INFO
3.進(jìn)入工程目錄,啟動(dòng)生產(chǎn)者
python app.py
可以看到任務(wù)已經(jīng)成功提交但是worker卻報(bào)錯(cuò)
問了度娘發(fā)現(xiàn)是windows10下celery的異常抠忘,解決方案就是
- pip install eventlet
- 啟動(dòng)worker時(shí)的命令加入?yún)?shù): celery worker -A celery_demo01 -l INFO -P eventlet