概述
huey是一個(gè)輕量級(jí)任務(wù)隊(duì)列筹麸,它是用Python開發(fā)的枫夺,僅僅依賴Python的redis客戶端将宪。支持以下功能:
1、支持多進(jìn)程,多線程较坛,協(xié)程任務(wù)模型
2印蔗、支持在給定時(shí)間或者給定延遲之后執(zhí)行任務(wù)
3、支持像crontab一樣建立周期任務(wù)
4丑勤、支持失敗后自動(dòng)重試任務(wù)
5华嘹、支持任務(wù)結(jié)果存儲(chǔ)。
官方文檔為:https://huey.readthedocs.io/en/latest/getting-started.html
Huey內(nèi)部分析
下面我們來分析Huey內(nèi)部以及Huey源碼法竞,這使我們更加清晰Huey的使用耙厚。Huey的源碼主要集中在comsumer部分。因此岔霸,我們主要來看consumer.py的實(shí)現(xiàn)薛躬。
首先consumer主要有三個(gè)部分組成:
1、主要的處理函數(shù)
2呆细、調(diào)度器
3型宝、執(zhí)行器(workers)
這三個(gè)組件負(fù)責(zé)接收、調(diào)度絮爷、以及執(zhí)行:
1趴酣、當(dāng)你調(diào)用一個(gè)被huey裝飾的函數(shù)時(shí),它會(huì)將一條消息放入隊(duì)列坑夯。同時(shí)价卤,應(yīng)用將會(huì)立即返回一個(gè)TaskResultWrapper對(duì)象。
2渊涝、在消費(fèi)者進(jìn)程中慎璧,執(zhí)行者(workers)將會(huì)監(jiān)聽新的消息,然后其中一個(gè)執(zhí)行者將會(huì)接收你的消息然后指令任務(wù)在某個(gè)時(shí)間跨释,帶上某個(gè)參數(shù)去執(zhí)行它胸私。
3、在守護(hù)進(jìn)程中鳖谈,執(zhí)行者關(guān)差消息岁疼,并時(shí)刻檢查他是否被暫停(revoked)或者是否被延遲調(diào)度。如果被暫停缆娃,該消息就會(huì)被丟棄捷绒。如果該消息被延遲調(diào)度,它講會(huì)加入調(diào)度隊(duì)列贯要。否則會(huì)被執(zhí)行暖侨。
4、執(zhí)行者線程執(zhí)行任務(wù)崇渗。如果任務(wù)完成字逗,結(jié)果將會(huì)被發(fā)布京郑。如果任務(wù)失敗,消費(fèi)者進(jìn)程將會(huì)檢查該任務(wù)是否被重試葫掉。如果任務(wù)可以被重試些举,消費(fèi)者將檢查該任務(wù)是否配置了等待時(shí)間。依賴這個(gè)配置俭厚,huey將會(huì)重新將任務(wù)入隊(duì)執(zhí)行户魏。