Flask實戰第66天:celery實現異步任務


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的結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM