(3)使用 async 控制并發(fā)

知識點

  1. 學習 async(https://github.com/caolan/async ) 的使用。這里有個詳細的 async demo 演示:https://github.com/alsotang/async_demo
  2. 學習使用 async 來控制并發(fā)連接數(shù)晃琳。

課程內(nèi)容

使用eventproxy控制并發(fā)(http://www.reibang.com/p/c13a9977053a)的代碼其實是不完美的。為什么這么說人灼,是因為在這個項目之中顾翼,之前我使用的是一次性發(fā)送20個請求出去而簡書因為我發(fā)出的并發(fā)連接數(shù)太多而當你是在惡意請求,雖然并沒有把 IP 封掉适贸,但是出現(xiàn)了503錯誤。所以之后代碼之中選擇了只發(fā)送3個請求烙样。

我們在寫爬蟲的時候蕊肥,如果有 1000 個鏈接要去爬谒获,那么不可能同時發(fā)出 1000 個并發(fā)鏈接出去對不對?我們需要控制一下并發(fā)的數(shù)量裸准,比如并發(fā) 10 個就好赔硫,然后慢慢抓完這 1000 個鏈接。

用 async 來做這件事很簡單爪膊。

這次我們要介紹的是 async 的 mapLimit(arr, limit, iterator, callback) 接口。另外僵芹,還有個常用的控制并發(fā)連接數(shù)的接口是 queue(worker, concurrency)小槐,大家可以去 https://github.com/caolan/async#queueworker-concurrency 看看說明荷辕。

對了,還有個問題是疮方,什么時候用 eventproxy,什么時候使用 async 呢疆栏?它們不都是用來做異步流程控制的嗎惫谤?

我的答案是:

當你需要去多個源(一般是小于 10 個)匯總數(shù)據(jù)的時候,用 eventproxy 方便溜歪;當你需要用到隊列,需要控制并發(fā)數(shù)蝴猪,或者你喜歡函數(shù)式編程思維時,使用 async嚎莉。大部分場景是前者沛豌,所以我個人大部分時間是用 eventproxy 的。

正題開始。

首先爬早,我們偽造一個 fetchUrl(url, callback) 函數(shù)启妹,這個函數(shù)的作用就是,當你通過

fetchUrl('http://www.baidu.com', function (err, content) {
  // do something with `content`
});

調(diào)用它時饶米,它會返回 http://www.baidu.com 的頁面內(nèi)容回來。

當然照瘾,我們這里的返回內(nèi)容是假的丧慈,返回延時是隨機的。并且在它被調(diào)用時逃默,會告訴你它現(xiàn)在一共被多少個地方并發(fā)調(diào)用著。

這組鏈接的長這樣:

運行輸出是這樣的:

可以看到,一開始吟税,并發(fā)鏈接數(shù)是從 1 開始增長的,增長到 5 時肖抱,就不再增加。當其中有任務完成時虐沥,再繼續(xù)抓取泽艘。并發(fā)連接數(shù)始終控制在 5 個。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末天试,一起剝皮案震驚了整個濱河市然低,隨后出現(xiàn)的幾起案子务唐,更是在濱河造成了極大的恐慌,老刑警劉巖枫笛,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刚照,死亡現(xiàn)場離奇詭異,居然都是意外死亡啊楚,警方通過查閱死者的電腦和手機浑彰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郭变,“玉大人,你說我怎么就攤上這事拍嵌⊙撸” “怎么了撇他?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長困肩。 經(jīng)常有香客問我,道長勇劣,這世上最難降的妖魔是什么潭枣? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮盆犁,結果婚禮上,老公的妹妹穿的比我還像新娘醋奠。我一直安慰自己,他們只是感情好窜司,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布塞祈。 她就那樣靜靜地躺著路呜,像睡著了一般织咧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抵屿,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天捅位,我揣著相機與錄音,去河邊找鬼艇搀。 笑死,一個胖子當著我的面吹牛衷笋,可吹牛的內(nèi)容都是我干的矩屁。 我是一名探鬼主播辟宗,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼泊脐,長吁一口氣:“原來是場噩夢啊……” “哼烁峭!你這毒婦竟也來了?” 一聲冷哼從身側響起约郁,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎调煎,沒想到半個月后己肮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體士袄,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年寓辱,在試婚紗的時候發(fā)現(xiàn)自己被綠了赤拒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡挎挖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崔涂,到底是詐尸還是另有隱情,我是刑警寧澤冷蚂,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布汛闸,位于F島的核電站,受9級特大地震影響诸老,放射性物質發(fā)生泄漏。R本人自食惡果不足惜吮廉,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一畸肆、第九天 我趴在偏房一處隱蔽的房頂上張望宙址。 院中可真熱鬧,春花似錦抡砂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厦瓢。三九已至,卻和暖如春劳跃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刨仑。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工夹姥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艺智。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓圾亏,卻偏偏與公主長得像十拣,于是被迫代替她去往敵國和親志鹃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理缰趋,服務發(fā)現(xiàn)陕见,斷路器,智...
    卡卡羅2017閱讀 134,696評論 18 139
  • 目標 使用 async(https://github.com/caolan/async) 來控制并發(fā)連接數(shù) 新建文...
    與蟒唯舞閱讀 3,090評論 2 3
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,720評論 0 4
  • 仿佛要撇清曾經(jīng)交好一般,我們可以長達幾年都不見面 前幾日為了寫自己這些年的外貌上的變化忍坷,翻遍了近十年的照片,很多久...
    我是傻妞閱讀 262評論 0 0
  • 今天晚上我給我自己的旅游鞋刷鞋子晰骑,洗完腳绊序,我又給我自己的拖鞋刷鞋子硕舆。上面刷刷下面是左面刷刷右面刷刷里面刷刷。我覺得...
    41f9d0a5c8db閱讀 162評論 0 0