Celery進階二

任務(wù)調(diào)度delay&apply_async

delay與apply_async都是用來做任務(wù)調(diào)度凛驮,但如果查看delay的源碼會發(fā)現(xiàn)最終還是調(diào)用了apply_async厚者,簡單來說delay就是apply_async的快捷方式,而apply_async則有很多參數(shù)來控制任務(wù)調(diào)度撬即。
apply_async支持常用參數(shù):

  • eta:指定任務(wù)執(zhí)行時間宰缤,類型為datetime時間類型颂翼;
  • countdown:倒計時,單位秒,浮點類型慨灭;
  • expires:任務(wù)過期時間朦乏,如果任務(wù)在超過過期時間還未執(zhí)行則回收任務(wù),浮點類型獲取datetime類型缘挑;
  • retry:任務(wù)執(zhí)行失敗時候是否嘗試集歇,布爾類型。语淘;
  • serializer:序列化方案,支持pickle际歼、json惶翻、yaml、msgpack鹅心;
  • priority:任務(wù)優(yōu)先級吕粗,有0~9優(yōu)先級可設(shè)置,int類型旭愧;
  • retry_policy:任務(wù)重試機制颅筋,其中包含幾個重試參數(shù)宙暇,類型是dict如下:
    • max_retries:最大重試次數(shù)

    • interval_start:重試等待時間

    • interval_step:每次重試疊加時長,假設(shè)第一重試等待1s议泵,第二次等待1+n秒

    • interval_max:最大等待時間

Celery設(shè)置參數(shù)說明

  • CELERY_DEFAULT_QUEUE 默認隊列
  • CELERY_RESULT_BACKEND 存儲地址
  • CELERY_TASK_SERIALIZER 任務(wù)序列化方式
  • CELERY_RESULT_SERIALIZER 任務(wù)結(jié)果序列化方式
  • CELERY_TASK_RESULT_EXPIRES 任務(wù)過期時間
  • CELERYD_CONCURRENCY 任務(wù)并發(fā)數(shù)
  • CELERYBEAT_SCHEDULE 任務(wù)調(diào)度
  • CELERY_QUEUE 自定義任務(wù)隊列

CELERY_QUEUE = (       
    Queue('default',exchange=Exchange('default'), routing_key="default.#"),     # 路由鍵 以 "default." 開頭的消息都進入 default 隊列.
    Queue('task1_app',exchange=Exchange('task1'), routing_key="task1.#")     # 路由鍵 以 "web." 開頭的消息都進入 task1隊列.
)
  • CELERY_ROUTES 自定義任務(wù)路由
CELERY_ROUTES = {

    'celery_app.app_task1.auto_crawl':{'queue':'task1','routing_key':'task1'},
    'celery_app.app_task1.auto_download':{'queue':'task1','routing_key':'task1'},
    'celery_app.app_task1.timelycrawl': {'queue': 'task2', 'routing_key': 'task2'},
    'celery_app.app_task1.timelydownload': {'queue': 'task2', 'routing_key': 'task2'}
}
  • CELERY_ACCEPT_CONTENT 指定過任務(wù)接受內(nèi)容的格式

CELERYBEAT_SCHEDULE = {
    'add': {
        'task': 'proj.tasks.add', #任務(wù)的路勁
        'schedule': timedelta(seconds=10), #定時啟動時間,也可以用crontab
        'args': (16, 16) #任務(wù)參數(shù)  
    }

Celery的存儲問題

在使用定時任務(wù)的時候我發(fā)現(xiàn)了一個問題占贫,就是當(dāng)你有兩個定時任務(wù)(task1,task2)時先口,兩個的定時時間相同比如都是一分鐘型奥,
然后task1的執(zhí)行時間較長要2分鐘,而task2的執(zhí)行時間只要兩秒碉京,理想狀態(tài)下是task1在執(zhí)行但因為時間較長厢汹,會掛起,然后在掛起的時間里定時的去執(zhí)行task2谐宙。但實際情況下烫葬,當(dāng)進行task1的時候,在task1未執(zhí)行完的時候凡蜻,task2并不執(zhí)行搭综,然后當(dāng)task1執(zhí)行完時,task2會立馬執(zhí)行好幾次咽瓷。
下圖就是设凹,celery的流程:


image.png

從該圖可以看出,造成該原因的是因為只有一個Woker茅姜,在從任務(wù)隊列里面拿出一個任務(wù)時闪朱,在沒執(zhí)行完當(dāng)前任務(wù)的時候是不會在往任務(wù)隊列里面拿去任務(wù),但task2在每兩秒內(nèi)會往該任務(wù)隊列里面放入任務(wù),所以根據(jù)隊列先進先出的原則钻洒,在task1執(zhí)行完時奋姿,會立馬執(zhí)行好幾次的task2

解決方案:

image.png

解決的方法就是,增加并發(fā)數(shù)素标,也就是在設(shè)置里面添加CELERYD_CONCURRENCY參數(shù)称诗,每個woker在閑空的時候就會自動去任務(wù)隊列里面拿任務(wù)就不會造成任務(wù)阻塞。

所以定時任務(wù)最好不要放多個互相之間有依賴關(guān)系的任務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末头遭,一起剝皮案震驚了整個濱河市寓免,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌计维,老刑警劉巖袜香,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鲫惶,居然都是意外死亡蜈首,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欢策,“玉大人吆寨,你說我怎么就攤上這事〔瓤埽” “怎么了啄清?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姑荷。 經(jīng)常有香客問我盒延,道長,這世上最難降的妖魔是什么鼠冕? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任添寺,我火速辦了婚禮,結(jié)果婚禮上懈费,老公的妹妹穿的比我還像新娘计露。我一直安慰自己,他們只是感情好憎乙,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布票罐。 她就那樣靜靜地躺著,像睡著了一般泞边。 火紅的嫁衣襯著肌膚如雪该押。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天阵谚,我揣著相機與錄音蚕礼,去河邊找鬼。 笑死梢什,一個胖子當(dāng)著我的面吹牛奠蹬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嗡午,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼囤躁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荔睹?” 一聲冷哼從身側(cè)響起狸演,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎僻他,沒想到半個月后严沥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡中姜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丢胚。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡翩瓜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出携龟,到底是詐尸還是另有隱情兔跌,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布峡蟋,位于F島的核電站坟桅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蕊蝗。R本人自食惡果不足惜仅乓,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蓬戚。 院中可真熱鬧夸楣,春花似錦、人聲如沸子漩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幢泼。三九已至紧显,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缕棵,已是汗流浹背孵班。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挥吵,地道東北人重父。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像忽匈,于是被迫代替她去往敵國和親房午。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.在一些復(fù)雜的處理中丹允,使用隊列 在settings.py中添加 2.啟動特定隊列處理任務(wù) celery -A p...
    第八共同體閱讀 315評論 0 0
  • Celery 在程序的運行過程中郭厌,我們經(jīng)常會碰到一些耗時耗資源的操作,為了避免它們阻塞主程序的運行雕蔽,我們經(jīng)常會采用...
    HAO延WEI閱讀 3,465評論 1 5
  • 一折柠、前言 上一篇文章iOS多線程淺匯-原理篇中整理了一些有關(guān)多線程的基本概念。本篇博文介紹的是iOS中常用的幾個多...
    nuclear閱讀 2,050評論 6 18
  • Celery 在程序運行過程中批狐,經(jīng)常會遇到一些耗時耗資源的任務(wù)扇售,為了避免這些任務(wù)阻塞主進程的運行前塔,我們會采用多線程...
    玩阿軻睡妲己閱讀 8,798評論 1 9
  • 一、前言 本篇博文介紹的是iOS中常用的幾個多線程技術(shù): NSThread GCD NSOperation 由于a...
    和玨貓閱讀 577評論 0 1