第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

芹菜任務(wù)被“接收”意味著什么?當(dāng)所有 celery 工作線程都被阻塞時(shí),未“收到”的新任務(wù)會發(fā)生什么

芹菜任務(wù)被“接收”意味著什么?當(dāng)所有 celery 工作線程都被阻塞時(shí),未“收到”的新任務(wù)會發(fā)生什么

拉莫斯之舞 2023-12-09 15:41:12
我正在開發(fā)一個(gè)新的監(jiān)控系統(tǒng),該系統(tǒng)可以測量 Celery 隊(duì)列吞吐量,并在隊(duì)列備份時(shí)幫助向團(tuán)隊(duì)發(fā)出警報(bào)。在我的工作過程中,我遇到了一些我不理解的奇怪行為(并且在 Celery 規(guī)范中沒有詳細(xì)記錄)。出于測試目的,我設(shè)置了一個(gè)端點(diǎn),該端點(diǎn)將使用 16 個(gè)可用于模擬備份隊(duì)列的長時(shí)間運(yùn)行的任務(wù)填充隊(duì)列。框架是Flask,隊(duì)列代理是Redis。Celery 配置為每個(gè)工作人員可以并行處理最多 4 個(gè)任務(wù),而我有 2 個(gè)工作人員正在運(yùn)行。api/health.pydef health():    health = Blueprint("health", __name__)    @health.route("/api/debug/create-long-queue", methods=["GET"])    def long_queue():        for i in range(16):            sleepy_job.delay()        return make_response({}, 200)    return healthjobs.py@celery.task(priority=HIGH_PRIORITY)def sleepy_job(*args, **kwargs):    time.sleep(30)以下是我模擬備份生產(chǎn)隊(duì)列的方法:我打電話/api/debug/create-long-queue來模擬隊(duì)列中的備份。根據(jù)上面的計(jì)算,每個(gè)工人應(yīng)該忙著睡覺 1 分鐘(總共可以同時(shí)處理 8 個(gè)任務(wù)。每個(gè)任務(wù)只休眠 30 秒,總共 16 個(gè)任務(wù)。)不久后(< 5 秒)我進(jìn)行了另一個(gè) API 調(diào)用,這會啟動具有實(shí)際業(yè)務(wù)邏輯的不同工作(處理入站 Webhook API 調(diào)用)。我們稱這個(gè)工作為handle_incoming_message。這是我看到的使用花來檢查隊(duì)列的內(nèi)容:雖然所有工作線程都被前 8 個(gè)任務(wù)阻塞,但我在隊(duì)列中看 sleepy_job不到新任務(wù)的跡象 ,盡管我確信第二個(gè) API 調(diào)用已被調(diào)用。handle_incoming_messagehandle_incoming_message.delay()前 8 個(gè)sleepy_job任務(wù)完成后(約 30 秒),我 handle_incoming_message在隊(duì)列中看到新任務(wù),狀態(tài)為RECIEVED。在第二個(gè)(也是最后一個(gè))8 個(gè)sleepy_job任務(wù)完成后,我現(xiàn)在看到handle_incoming_message了狀態(tài)STARTED(當(dāng) UI 使用該任務(wù)中接收和處理的新數(shù)據(jù)進(jìn)行更新時(shí),我可以確認(rèn)這一點(diǎn)。)問題因此,很明顯,當(dāng)工作人員在處理完前 8 個(gè)sleepy_job任務(wù)后暫時(shí)解除阻塞時(shí),他們正在以一種可見的方式做一些事情來標(biāo)記/確認(rèn)新任務(wù)。但這留下了幾個(gè)懸而未決的問題:handle_incoming_messagehandle_incoming_message當(dāng)worker被阻塞時(shí),新任務(wù)的狀態(tài)如何?工作人員解除封鎖后發(fā)生了哪些變化,使得它現(xiàn)在可以了解新handle_incoming_message任務(wù)?“已接收”狀態(tài)實(shí)際上意味著什么?(獎(jiǎng)勵(lì):如何在工作人員被阻塞時(shí)了解排隊(duì)的任務(wù)?)
查看完整描述

1 回答

?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊

  1. 當(dāng)所有工作人員都被阻止時(shí),某些任務(wù)可能由于預(yù)取而處于已接收狀態(tài)(請參閱文檔)。因此,您的任務(wù)很可能只是在隊(duì)列中,等待 Celery 工作進(jìn)程(協(xié)調(diào)進(jìn)程 - 這些不是實(shí)際的工作進(jìn)程)接收。

  2. Flower 是一項(xiàng)簡單的服務(wù),它基于稱為“任務(wù)事件”的 Celery 功能構(gòu)建。簡單來說,它(Flower)將自己訂閱為所有事件(已接收、成功、啟動、失敗等)的接收者,然后以可視方式將這些事件呈現(xiàn)給 Web 客戶端。因此,當(dāng) Celery 工作線程收到任務(wù)時(shí),就會發(fā)送“任務(wù)已收到”事件。Flower 獲取此事件,并更改儀表板中該任務(wù)的狀態(tài)。

  3. 當(dāng)一個(gè)任務(wù)被“接收”時(shí),這意味著特定的 Celery 工作線程將該任務(wù)從隊(duì)列中取出,并且它可以立即執(zhí)行(如果有空閑的工作進(jìn)程來執(zhí)行它),或者 Celery 工作線程將等待工作進(jìn)程成為準(zhǔn)備運(yùn)行任務(wù)。我已經(jīng)提到過預(yù)取 - Celery 工作進(jìn)程通常會執(zhí)行比可用工作進(jìn)程更多的任務(wù)。

  4. Celery 沒有為用戶提供列出特定隊(duì)列中的內(nèi)容的方法。

查看完整回答
反對 回復(fù) 2023-12-09
  • 1 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號