Python Celery異步任務(wù)隊(duì)列使用方法解析
Celery是一個(gè)異步的任務(wù)隊(duì)列(也叫做分布式任務(wù)隊(duì)列),一個(gè)簡(jiǎn)單,靈活,可靠的分布式系統(tǒng),用于處理大量消息,同時(shí)為操作提供維護(hù)此類系統(tǒng)所需要的工具。
celery的優(yōu)點(diǎn)
1:簡(jiǎn)單,容易使用,不需要配置文件
2:高可用,任務(wù)執(zhí)行失敗或執(zhí)行過程中發(fā)生連續(xù)中斷,celery會(huì)自動(dòng)嘗試重新執(zhí)行任務(wù)
3:快速,一個(gè)單進(jìn)程的celery每分鐘可以處理上百萬個(gè)任務(wù)
4:靈活,幾乎celery的各個(gè)組件都可以被擴(kuò)展
celery應(yīng)用場(chǎng)景
1:異步發(fā)郵件,一般發(fā)郵件等比較耗時(shí)的操作,這個(gè)時(shí)候需要提交任務(wù)給celery就可以了,由worker進(jìn)行發(fā)郵件操作
2:有些跑批量接口任務(wù),需要耗時(shí)較長(zhǎng),也可以做成異步任務(wù)
3:定時(shí)調(diào)度任務(wù)
Celery與Django一起使用(以發(fā)送短信為例)
獨(dú)立于項(xiàng)目新建一個(gè)package包
在package包中新建一個(gè)名為sms的package包
新建tasks.py文件
#定義耗時(shí)的函數(shù) from utils.ytx_sdk.sendSMS import CCP from celery_tasks.main import app #為函數(shù)添加裝飾器,這個(gè)函數(shù)就成為了celery的任務(wù) @app.task def send_sms_code(mobile,code,expires,template_id): try: # CCP.sendTemplateSMS(mobile,code,expires,template_id) print(code) except: return '發(fā)送短信失敗'
在package包中新建config.py
內(nèi)容如下(中間人,接收生產(chǎn)者發(fā)來的消息即Task,將任務(wù)存入隊(duì)列。任務(wù)的消費(fèi)者是Worker。Celery本身不提供隊(duì)列服務(wù),推薦用Redis或RabbitMQ實(shí)現(xiàn)隊(duì)列服務(wù)。)
#指定代理人隊(duì)列==>redis
broker_url='redis://127.0.0.1:6379/15'
在package包中新建main.py
內(nèi)容如下(需要將task注冊(cè)到celery應(yīng)用中)
#啟動(dòng)工人的文件 from celery import Celery # 為celery使用django配置文件進(jìn)行設(shè)置 import os if not os.getenv('DJANGO_SETTINGS_MODULE'): os.environ['DJANGO_SETTINGS_MODULE'] = 'yinyue.settings.dev' # 創(chuàng)建celery應(yīng)用 app = Celery('yinyue') # 導(dǎo)入celery配置 app.config_from_object('celery_tasks.config') # 自動(dòng)注冊(cè)celery任務(wù) app.autodiscover_tasks([ 'celery_tasks.sms' ])
在django框架對(duì)應(yīng)模塊的視圖中使用
#調(diào)用celery的任務(wù):任務(wù)名.delay(參數(shù))
send_sms_code.delay(mobile,code,constants.SMS_CODE_EXPIRES/60,1)
啟動(dòng)celery服務(wù): celery -A celery_tasks.main worker -l info
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
雙向RNN:bidirectional_dynamic_rnn()函數(shù)的使用詳解
今天小編就為大家分享一篇雙向RNN:bidirectional_dynamic_rnn()函數(shù)的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01python如何用pymodbus庫(kù)進(jìn)行modbus tcp通信
這篇文章主要介紹了python如何用pymodbus庫(kù)進(jìn)行modbus tcp通信問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Python中.py程序在CMD控制臺(tái)以指定虛擬環(huán)境運(yùn)行
本文主要介紹了Python中.py程序在CMD控制臺(tái)以指定虛擬環(huán)境運(yùn)行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Python多線程編程(三):threading.Thread類的重要函數(shù)和方法
這篇文章主要介紹了Python多線程編程(三):threading.Thread類的重要函數(shù)和方法,本文講解了線程名稱、join方法、setDaemon方法等內(nèi)容,需要的朋友可以參考下2015-04-04python中時(shí)間、日期、時(shí)間戳的轉(zhuǎn)換的實(shí)現(xiàn)方法
這篇文章主要介紹了python中時(shí)間、日期、時(shí)間戳的轉(zhuǎn)換的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Python實(shí)現(xiàn)簡(jiǎn)易端口掃描器代碼實(shí)例
本篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)易端口掃描器的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03