分布式Celery

前言

大家都知道Celery是分布式任務(wù)隊(duì)列,可是在學(xué)習(xí)過程中闷煤,發(fā)現(xiàn)基本都是怎么用celery去異步操作,很少有講到如何分布式命爬。于是把自己的采坑過程分享給大家曹傀。

一、準(zhǔn)備工作

1.選擇一個(gè)消息中間件Broker

官方推薦的有RabbitMQ和Redis饲宛,二選一安裝皆愉。具體安裝可參考
http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#first-steps
本人選擇Redis做Broker.

2.準(zhǔn)備一個(gè)虛擬機(jī)

確保本機(jī)和虛擬機(jī)都可以連上redis。有其他網(wǎng)絡(luò)互通的機(jī)器也可以艇抠。

二幕庐、簡單的demo

1.創(chuàng)建項(xiàng)目和python環(huán)境

mkdir myCelery
cd myCelery
virtualenv -p python2 envp2
source envp2/bin/activate

2.安裝Celery和Redis

pip install celery==4.0 
pip install redis

請注意這里安裝的是4.0.按照官方的說法4.0是既支持Python2又支持python3的版本。官方內(nèi)容如下:

Version Requirements

Celery version 4.0 runs on

Python ?2.7, 3.4, 3.5?
PyPy ?5.4, 5.5?
This is the last version to support Python 2.7, and from the next version (Celery 5.x) Python 3.5 or newer is required.

If you’re running an older version of Python, you need to be running an older version of Celery:

Python 2.6: Celery series 3.1 or earlier.
Python 2.5: Celery series 3.0 or earlier.
Python 2.4 was Celery series 2.2 or earlier.
Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.

3.碼代碼

vim tasks.py

conding:

from celery import Celery

app = Celery('tasks', broker='redis://10.211.55.2:6379/0')

@app.task
def add(x, y):
    return x + y

4.運(yùn)行

把tasks作為worker運(yùn)行起來

celery -A tasks worker -l info

5.發(fā)起任務(wù)

另開一個(gè)terminal

cd myCelery
envp2/bin/pyton 
#python terminal 下
>>> from tasks import add
>>> add.delay(4, 4)

觀察運(yùn)行tasks的terminal家淤,有結(jié)果8出來就證明一切正常异剥。熟悉了簡單的流程后,我們就在這個(gè)基礎(chǔ)上進(jìn)一步深入絮重。

三冤寿、分布式celery
開啟虛擬機(jī)歹苦,把tasks.py拷貝過去,python環(huán)境配置完成后督怜,打開terminal殴瘦。運(yùn)行tasks

celery -A tasks worker -l info

這時(shí)觀察本機(jī)運(yùn)行tasks的terminal,多輸出如下內(nèi)容:

[2018-01-24 21:03:10,114: INFO/MainProcess]  sync with celery@ubuntu

而虛擬機(jī)上的terminal將會(huì)輸出如下內(nèi)容:

[2018-01-24 21:03:09,007: INFO/MainProcess] Connected to redis://10.211.55.2:6379/0
[2018-01-24 21:03:09,017: INFO/MainProcess] mingle: searching for neighbors
[2018-01-24 21:03:10,036: INFO/MainProcess] mingle: sync with 1 nodes
[2018-01-24 21:03:10,037: INFO/MainProcess] mingle: sync complete
[2018-01-24 21:03:10,052: INFO/MainProcess] celery@ubuntu ready.

至此,集群已經(jīng)成功連接号杠。下面我們來測試一下蚪腋。在本機(jī)tasks.py同級新建test_tasks.py文件,輸入下面內(nèi)容并新開terminal運(yùn)行:

from tasks import add
#循環(huán)執(zhí)行10次add函數(shù)
for i in range(10):
    add.delay(i, i)

來觀察一下本機(jī)tasks terminal:

[2018-01-24 21:37:18,360: INFO/MainProcess] Received task: tasks.add[33586201-082a-4e8f-8153-8b9d757990af]
[2018-01-24 21:37:18,361: INFO/ForkPoolWorker-7] Task tasks.add[33586201-082a-4e8f-8153-8b9d757990af] succeeded in 0.0004948119749315083s: 2
[2018-01-24 21:37:18,362: INFO/MainProcess] Received task: tasks.add[a6e363cf-fd25-4b0d-9da4-04bac1c5476c]
[2018-01-24 21:37:18,363: INFO/MainProcess] Received task: tasks.add[7fd2b545-f87b-49d3-941f-b8723bd1b039]
[2018-01-24 21:37:18,365: INFO/ForkPoolWorker-2] Task tasks.add[7fd2b545-f87b-49d3-941f-b8723bd1b039] succeeded in 0.000525131996255368s: 8
[2018-01-24 21:37:18,365: INFO/ForkPoolWorker-8] Task tasks.add[a6e363cf-fd25-4b0d-9da4-04bac1c5476c] succeeded in 0.000518032000400126s: 6
[2018-01-24 21:37:18,366: INFO/MainProcess] Received task: tasks.add[79d1ead3-1077-4bfd-8300-3a335f533b74]
[2018-01-24 21:37:18,368: INFO/MainProcess] Received task: tasks.add[0d0eefab-c6f0-4fa6-945c-6c7931b74e7b]
[2018-01-24 21:37:18,368: INFO/ForkPoolWorker-4] Task tasks.add[79d1ead3-1077-4bfd-8300-3a335f533b74] succeeded in 0.00042340101208537817s: 12
[2018-01-24 21:37:18,369: INFO/MainProcess] Received task: tasks.add[230eb9d1-7fa5-4f18-8fd4-f535e4c190d2]
[2018-01-24 21:37:18,370: INFO/ForkPoolWorker-6] Task tasks.add[0d0eefab-c6f0-4fa6-945c-6c7931b74e7b] succeeded in 0.00048609700752422214s: 16
[2018-01-24 21:37:18,370: INFO/ForkPoolWorker-7] Task tasks.add[230eb9d1-7fa5-4f18-8fd4-f535e4c190d2] succeeded in 0.00046275201020762324s: 18

在來看一下虛擬機(jī)上的terminal:

[2018-01-24 21:37:17,261: INFO/MainProcess] Received task: tasks.add[f95a4a20-e245-4cdc-b48a-4b79416b14c1]  
[2018-01-24 21:37:17,263: INFO/ForkPoolWorker-1] Task tasks.add[f95a4a20-e245-4cdc-b48a-4b79416b14c1] succeeded in 0.00107001400102s: 0
[2018-01-24 21:37:17,264: INFO/MainProcess] Received task: tasks.add[3ddfbcda-7d75-488c-bc69-243f991bb49a]  
[2018-01-24 21:37:17,267: INFO/MainProcess] Received task: tasks.add[b0a36bfe-87c4-43ef-9e6e-fb8740dd26d0]  
[2018-01-24 21:37:17,267: INFO/ForkPoolWorker-1] Task tasks.add[3ddfbcda-7d75-488c-bc69-243f991bb49a] succeeded in 0.00107501300226s: 4
[2018-01-24 21:37:17,270: INFO/ForkPoolWorker-2] Task tasks.add[b0a36bfe-87c4-43ef-9e6e-fb8740dd26d0] succeeded in 0.00111001500045s: 10
[2018-01-24 21:37:17,272: INFO/MainProcess] Received task: tasks.add[7bcec842-65e5-407d-9e7d-99183956ef3e]  
[2018-01-24 21:37:17,277: INFO/ForkPoolWorker-1] Task tasks.add[7bcec842-65e5-407d-9e7d-99183956ef3e] succeeded in 0.000870012001542s: 14

我們只觀察succeeded in 及后面的值,本機(jī)輸出了: 2 8 6 12 16 18
虛擬機(jī)上輸出了:0 4 10 14
充分證明了10個(gè)add任務(wù)已經(jīng)被分發(fā)處理了。

四姨蟋、結(jié)束語

理解了celery的運(yùn)行規(guī)則后屉凯,可以很方便的搭建分布式系統(tǒng)。后續(xù)將會(huì)寫一篇celery如何和flask系統(tǒng)集成眼溶,介紹celery在Python2和Python3中使用的坑悠砚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市偷仿,隨后出現(xiàn)的幾起案子哩簿,更是在濱河造成了極大的恐慌,老刑警劉巖酝静,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羡玛,居然都是意外死亡别智,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門稼稿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薄榛,“玉大人,你說我怎么就攤上這事让歼〕担” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵惦费,是天一觀的道長确虱。 經(jīng)常有香客問我羊精,道長,這世上最難降的妖魔是什么啸蜜? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮辈挂,結(jié)果婚禮上衬横,老公的妹妹穿的比我還像新娘。我一直安慰自己终蒂,他們只是感情好蜂林,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布遥诉。 她就那樣靜靜地躺著,像睡著了一般噪叙。 火紅的嫁衣襯著肌膚如雪矮锈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天构眯,我揣著相機(jī)與錄音愕难,去河邊找鬼惫霸。 笑死猫缭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的壹店。 我是一名探鬼主播猜丹,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼硅卢!你這毒婦竟也來了射窒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤将塑,失蹤者是張志新(化名)和其女友劉穎脉顿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體点寥,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡艾疟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敢辩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔽莱。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戚长,靈堂內(nèi)的尸體忽然破棺而出盗冷,到底是詐尸還是另有隱情,我是刑警寧澤同廉,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布仪糖,位于F島的核電站,受9級特大地震影響恤溶,放射性物質(zhì)發(fā)生泄漏乓诽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一咒程、第九天 我趴在偏房一處隱蔽的房頂上張望鸠天。 院中可真熱鬧,春花似錦帐姻、人聲如沸稠集。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥纷。三九已至痹籍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晦鞋,已是汗流浹背蹲缠。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悠垛,地道東北人线定。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像确买,于是被迫代替她去往敵國和親斤讥。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

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