摘要:這是一道用來熟練的題目,給定個,要求使用在限定并發數為的情況下完成請求。
這是一道用來熟練Promise的題目,給定N個URL,要求使用Promise在限定并發數為M(M < N) 的情況下完成請求。
class PromisePool { constructor(max, fn) { this.max = max; // 最大并發數 this.fn = fn; // 自定義的請求函數 this.pool = []; // 并發池 this.urls = []; // 剩余的請求地址 } start(urls) { this.urls = urls; // 先循環把并發池塞滿 while (this.pool.length < this.max) { let url = this.urls.shift(); this.setTask(url); } // 利用Promise.race 方法來獲得并發池中某任務完成的信號 let race = Promise.race(this.pool); return this.run(race); } run(race) { race .then(res => { // 每當并發池跑完一個任務,就再塞入一個任務 let url = this.urls.shift(); this.setTask(url); return this.run(Promise.race(this.pool)); }); } setTask(url) { if (!url) return; let task = this.fn(url); this.pool.push(task); // 將該任務推入pool并發池中 console.log(`x1B[43m ${url} 開始,當前并發數:${this.pool.length}`); task.then(res => { // 請求結束后將該Promise任務從并發池中移除 this.pool.splice(this.pool.indexOf(task), 1); console.log(`x1B[43m ${url} 結束,當前并發數:${this.pool.length}`); }); } } // test const URLS = [ "bytedance.com", "tencent.com", "alibaba.com", "microsoft.com", "apple.com", "hulu.com", "amazon.com" ]; // 自定義請求函數 var requestFn = url => { return new Promise(resolve => { setTimeout(_ => { resolve(`任務 ${url} 完成`); }, 1000*dur++) }).then(res => { console.log("外部邏輯 ", res); }) } const pool = new PromisePool(3, requestFn); // 并發數為3 pool.start(URLs);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106935.html
摘要:而爬蟲一般用多線程來控制并發,然而如果是爬蟲,由于其單線程無阻塞性質以及事件循環機制,一般不用多線程來控制并發當然也可以實現多線程,此處非重點不再多講,而是更加簡便地直接在代碼層級上實現并發。下面我們用行代碼實現一個并發控制的函數。 前言 首發于 github blog 做過爬蟲的都知道,要控制爬蟲的請求并發量,其實也就是控制其爬取頻率,以免被封IP,還有的就是以此來控制爬蟲應用運...
摘要:故事開始了,小程序圖片合成真機測試時,會報錯。所以只能將異步并發改為同步阻塞式渲染。 showImg(https://segmentfault.com/img/remote/1460000013228074); 故事開始了,小程序canvas圖片合成 真機測試時,會報錯:getImageInfo failed 。也就是說,我這邊異步請求50張圖片,每張圖片都是通過getImageInf...
摘要:以上兩點同時滿足時則說明服務處于高負載狀態,則進行自適應降載。如果放行則返回,等待業務側執行回調函數執行指標統計。當前系統的最大并發數窗口單位時間內的最大通過數量窗口單位時間內的最小響應時間。 為什么需要降載微服務集群中,調用鏈路錯綜復雜,作為服務提供者需要有一種保護自己的機制,防止調用方無腦調用壓垮自己,保證...
摘要:成功爬取了拉鉤網上多個招聘崗位的具體信息后,數據可視化并得出分析結果如下從整體看,北上廣深杭這五個城市前端工程師招聘崗位,北京是遙遙領先,是深圳的兩倍,是廣州的三倍,其次到上海,深圳,杭州,廣州居末。 前前言 本文首發于 github blog 不想看爬蟲過程只想看職位錢途數據分析請看這里:前端招聘崗位分析C++招聘崗位分析JAVA招聘崗位分析PHP招聘崗位分析Python招聘崗位分析...
閱讀 2418·2021-11-24 09:39
閱讀 3244·2021-10-09 09:53
閱讀 1137·2021-09-22 16:06
閱讀 4457·2021-09-02 10:18
閱讀 804·2021-08-23 09:42
閱讀 1767·2021-08-17 10:11
閱讀 2690·2019-08-30 13:02
閱讀 2127·2019-08-30 12:49