Celery 是基於Python實現的模塊,用於執行異步定時週期任務的python
其結構的組成是由redis
1.用戶任務appwindows
2.管道 broker 用於存儲任務 官方推薦 redis rabbitMQ / backend 用於存儲任務執行結果的app
3.員工 worker異步
from celery import Celery import time # 建立一個Celery實例,這就是咱們用戶的應用app my_task = Celery("tasks", broker="redis://127.0.0.1:6379",backend="redis://127.0.0.1:6379") # 爲應用建立任務,func1 @my_task.task def func1(x, y): time.sleep(15) return x + y
from s1 import func1 # 將任務交給Celery的Worker執行 res = func1.delay(2,4) # 返回任務ID print(res.id)
from celery.result import AsyncResult from s1 import my_task # 異步獲取任務返回值 async_task = AstyncResult(id="31ec65e8-3995-4ee1-b3a8-1528400afd5a",app=my_task) # 判斷異步任務是否執行成功 if async_task.successful(): #獲取異步任務的返回值 result = async_task.get() print(result) else: print("任務還未執行完成")
根據操做系統的不一樣,啓動方式也存在差別:
Linux - celery worker -A s1 -l INFO
Windows:這裏須要注意的是celery 4.0 已經再也不對Windows操做系統提供支持了,也就是在windows環境下出現問題除非本身解決,否賊官方是不會給你解決的
Windows - celery worker -A s1 -l INFO -P eventlet
ps: eventlet 是一個python的三方庫 須要使用 pip安裝 pip install eventletasync