Celery文檔:http://docs.celeryproject.org
Celery 通過消息進行通信,用專用的工作線程不斷監視任務隊列以執行新工作。
Celery需要消息傳輸來發送和接收消息。RabbitMQ和Redis代理傳輸功能齊全,但也支持無數其他實驗解決方案,這里我們選擇redis.
下面我們開始寫個demo來演示怎么使用它。
安裝redis, 地址: 10.2.2.120:6379
安裝celery
pip install celery
在windows操作系統上還要安裝eventlet
pip install eventlet
安裝redis插件
pip install redis
新建個純python環境:
tasks.py用來配置任務的, main.py 用來執行
編輯tasks.py
# task:任務 # broker(中間人):存儲任務的隊列 # worker:真正執行任務的工作者 # backend:用來存儲任務執行后的結果 from celery import Celery import time celery = Celery("tasks", broker="redis://10.2.2.120:6379/0", backend="redis://10.2.2.120:6379/0") @celery.task #加上此裝飾器,這個函數就變成celery任務了(task) def send_mail(): print('郵件開始發送....') time.sleep(10) print('郵件發送結束!')
編輯main.py
from tasks import send_mail if __name__ == '__main__': send_mail.delay() #這樣調用,就會變成異步任務了,不會被阻塞
然后我們在 項目目錄啟動 worker來監聽任務
在Linux系統中是不需要制定 --pool的
(bbs) D:\celery_demo>celery -A tasks.celery --pool=eventlet worker --loglevel=info
執行main.py來觸發任務,結果會發現,main.py會立馬執行結束,並不會被阻塞在那里等待10s
下面是我連續執行兩次main.py的結果