python異步任務(wù)處理庫(kù)celery 異步web消息推送

python異步任務(wù)處理庫(kù)celery

0.安裝方式

pip install celery

一、單文件模式 基本使用

下面先直接上代碼膘婶,再慢慢說(shuō)明

異步任務(wù)文件 :

task.py

from celery import  Celery
# 創(chuàng)建應(yīng)用APP tasks當(dāng)前文件名相當(dāng)于當(dāng)前文件被引入時(shí)的__name__
# borker 負(fù)責(zé)攜程隊(duì)列的中間人 負(fù)責(zé)協(xié)調(diào)消費(fèi)者和生產(chǎn)者 利用redis中的列表類型Lpush, Rpush也能完成 此處使用mq
# backend 記錄任務(wù)處理結(jié)果的數(shù)據(jù)庫(kù)或者其他組件
# 如果要指定redis 端口賬號(hào)密碼的方式為密碼 地址 端口號(hào) 選擇數(shù)據(jù)庫(kù)號(hào) 選擇6
# 'redis://:密碼@127.0.0.1:6379/6'
app = Celery('tasks', broker='amqp://guest@localhost//', backend='redis://localhost')

@app.task
def add(x, y):
# 一個(gè)異步實(shí)例阵谚,相當(dāng)于生產(chǎn)者
   return x + y

此時(shí)創(chuàng)建了一個(gè)異步任務(wù)文件:
其他文件可以通過(guò) from tasks import add 導(dǎo)入這個(gè)異步實(shí)例
通過(guò) add.delay(a,b)傳入實(shí)參a,b進(jìn)行調(diào)用

  • 需要通過(guò)命令行方式啟動(dòng)異步服務(wù)文件(當(dāng)前目錄執(zhí)行)task.py

    • celery -A tasks worker --loglevel=info

調(diào)用異步任務(wù)實(shí)例(消費(fèi)者)

main.py

form tasks import add
 # 放入中間人隊(duì)列等待任務(wù)進(jìn)程(消費(fèi)者)調(diào)度
 result = add.delay(4慕蔚,5)
 # 打印任務(wù)的id執(zhí)行完畢會(huì)存到backend id可以用于異步地適時(shí)地獲取執(zhí)行結(jié)果
 print(result) # <AsyncResult: 6fdb0629-4beb-4eb7-be47-f22be1395e1d>
# 通過(guò)ready查看是否任務(wù)執(zhí)行完畢 
 result.ready() # false 還未執(zhí)行完畢
 # 延時(shí)一秒 等待
 result.get(timeout=1) # 9

執(zhí)行完畢


現(xiàn)在讓我們來(lái)看看作為backend的redis發(fā)生了什么

連接redis數(shù)據(jù)庫(kù)
輸入一下命令

select 6(選擇的數(shù)據(jù)庫(kù)號(hào)碼 默認(rèn)0)
keys * (顯示所有的key)

是不是似曾相識(shí)呢梧乘?
沒錯(cuò)就是我們key的后綴部分就是我們的上次執(zhí)行的任務(wù)id
下面我們獲取一下key的值讓我們更了解整個(gè)機(jī)制

演示keys

(由于沒有準(zhǔn)備文件趟济,我們就當(dāng)是9吧4鞑睢)
顯然這個(gè)key存放了本次異步任務(wù)執(zhí)行的結(jié)果信息
以上就是單個(gè)執(zhí)行與運(yùn)行機(jī)制了文件的執(zhí)行過(guò)程了

二送爸、多文件 目錄模式

這里提供一個(gè)實(shí)例 供大家參考

目錄結(jié)構(gòu)

init.py

這個(gè)沒什么好說(shuō)的了 空文件 識(shí)別為一個(gè)包

celery.py (APP引用文件)

from __future__ import absolute_import
from celery import Celery
# 當(dāng)前目錄名 任務(wù)實(shí)例所在的文件
app = Celery('celery_proj', include=['celery_proj.tasks'])
# 引入配置文件的目錄
app.config_from_object('celery_proj.config')

if __name__ == '__main__':
   app.start()

config.py (參數(shù)配置文件)

from __future__ import absolute_import
from datetime import timedelta
# 假設(shè)中間人和結(jié)果后端都使用redis 數(shù)據(jù)庫(kù)密碼為123456
CELERY_RESULT_BACKEND = 'redis://:123456@@127.0.0.1:6379/6'
BROKER_URL = 'redis://:123456@@127.0.0.1:6379/5'

'''
設(shè)置定期執(zhí)行任務(wù) 每30秒添加一次隊(duì)列,一分鐘后執(zhí)行 (注釋不啟動(dòng))
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERYBEAT_SCHEDULE = {
   'add-every-30-seconds': {
        'task': 'celery_proj.tasks.add',
        'schedule': timedelta(minutes=1),
        'args': (5,1) # task.add的調(diào)用參數(shù)
   },
}
'''

tasks.py (任務(wù)實(shí)例文件暖释,消費(fèi)者模型)

from __future__ import absolute_import
from celery_proj.celery import app
@app.task
def add(x,y):
   # 生產(chǎn)者函數(shù) 返回的結(jié)果會(huì)存儲(chǔ)到結(jié)果后端 用戶可以去結(jié)果后端backend中自行查找訪問(wèn)處理結(jié)果
   # 我們?cè)趩挝募钠ヅ淠J较?已經(jīng)介紹backend發(fā)生了什么
   return x+y
  • 命令行啟動(dòng)方式

    • celery -A celery_proj worker -B -l info (多文件包模式需要添加-B)

    • celery multi start w1 -A celery_proj -B -l info --logfile = celerylog.log --pidfile = celerypid.pid (以守護(hù)進(jìn)程啟動(dòng) 停止改成stop就行了 日志指定為celerylog.log)


參數(shù)配置文件還有很多可以配置使用場(chǎng)景的地方 例如定時(shí)執(zhí)行袭厂,每日按時(shí)執(zhí)行等場(chǎng)景使用 詳見官方文檔

celery官方文檔

以上就介紹完celery的基本使用了 我還有一篇博文關(guān)于如何利用celery實(shí)現(xiàn)微信小程序 推送提醒消息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市球匕,隨后出現(xiàn)的幾起案子纹磺,更是在濱河造成了極大的恐慌,老刑警劉巖亮曹,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橄杨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡照卦,警方通過(guò)查閱死者的電腦和手機(jī)式矫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)役耕,“玉大人采转,你說(shuō)我怎么就攤上這事∷捕唬” “怎么了氏义?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)图云。 經(jīng)常有香客問(wèn)我惯悠,道長(zhǎng),這世上最難降的妖魔是什么竣况? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任克婶,我火速辦了婚禮筒严,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘情萤。我一直安慰自己鸭蛙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布筋岛。 她就那樣靜靜地躺著娶视,像睡著了一般。 火紅的嫁衣襯著肌膚如雪睁宰。 梳的紋絲不亂的頭發(fā)上肪获,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音柒傻,去河邊找鬼孝赫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛红符,可吹牛的內(nèi)容都是我干的青柄。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼预侯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼致开!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起萎馅,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤双戳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后校坑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拣技,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡千诬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年耍目,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徐绑。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邪驮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傲茄,到底是詐尸還是另有隱情毅访,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布盘榨,位于F島的核電站喻粹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏草巡。R本人自食惡果不足惜守呜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧查乒,春花似錦弥喉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)猪腕。三九已至盖高,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腋腮,已是汗流浹背拒担。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工嘹屯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人从撼。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓州弟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親低零。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婆翔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361