<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        Node.js 如何利用異步提升任務(wù)處理速度

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:02:18
        文檔

        Node.js 如何利用異步提升任務(wù)處理速度

        Node.js 如何利用異步提升任務(wù)處理速度:今天在做一個(gè)小任務(wù),需要調(diào)用阿里云的圖像識(shí)別接口,對(duì) 62662 張照片進(jìn)行場(chǎng)景識(shí)別,并將結(jié)果寫到本地的 csv 文件中。 因?yàn)槿蝿?wù)很簡(jiǎn)單,沒想很多就開始碼。自從有了 async/await 之后,已經(jīng)很久不寫 callback 了,所以上手就寫成這樣: 本文所有代碼均有簡(jiǎn)化
        推薦度:
        導(dǎo)讀Node.js 如何利用異步提升任務(wù)處理速度:今天在做一個(gè)小任務(wù),需要調(diào)用阿里云的圖像識(shí)別接口,對(duì) 62662 張照片進(jìn)行場(chǎng)景識(shí)別,并將結(jié)果寫到本地的 csv 文件中。 因?yàn)槿蝿?wù)很簡(jiǎn)單,沒想很多就開始碼。自從有了 async/await 之后,已經(jīng)很久不寫 callback 了,所以上手就寫成這樣: 本文所有代碼均有簡(jiǎn)化

        今天在做一個(gè)小任務(wù),需要調(diào)用阿里云的圖像識(shí)別接口,對(duì) 62662 張照片進(jìn)行場(chǎng)景識(shí)別,并將結(jié)果寫到本地的 csv 文件中。

        因?yàn)槿蝿?wù)很簡(jiǎn)單,沒想很多就開始碼。自從有了 async/await 之后,已經(jīng)很久不寫 callback 了,所以上手就寫成這樣:

        本文所有代碼均有簡(jiǎn)化,只保留關(guān)鍵過程

        async fetchSceneTags(imagePath) {
         try {
         const result = await callAliyunAPI(imagePath);
         return result.errno === 0 ? result.tags : [];
         } catch(error) {
         return []; 
         }
        }
        
        async function writeScene(paths) {
         for (let i = 0, len = paths.length; i < len; i++) {
         await tags = fetchSceneTags(paths[i])
         writeToFile(tags);
         writeStdout(`${i} / ${len}`);
         }
        }
        
        function start() {
         const paths = loadPaths();
         writeScene(paths);
        }
        
        

        運(yùn)行起來以后沒問題就放著忙別的去了。過了差不多 2 小時(shí)回來一看,才跑了 17180 張圖,每分鐘 144 張。這才意識(shí)到同步速度太慢了,于是停掉進(jìn)程,將代碼改成下面這樣:

        fetchSceneTagsAsync(imagePath, callback) {
         callAliyunAPI(imagePath)
         .then(result => {
         const tags = result.errno === 0 ? result.tags : [];
         callback(tags);
         })
         .catch(error => callback([]));
        }
        
        function writeSceneAsync(paths) {
         const callback = tags => {
         await tags = fetchSceneTagsAsync(paths[i])
         writeToFile(tags);
         }
         
         paths.forEach(path => fetchSceneTagsAsync(path, callback));
        }
        
        function start() {
         const paths = loadPaths();
         writeSceneAsync(paths);
        }
        
        

        跑了一下,直接停擺了。嗯,不能一下把請(qǐng)求全發(fā)出去,加一個(gè) Throttle:

        fetchSceneTagsAsync(imagePath, callback) {
         callAliyunAPI(imagePath)
         .then(result => {
         const tags = result.errno === 0 ? result.tags : [];
         callback(tags);
         })
         .catch(error => callback([]));
        }
        
        function throttle(paths, callback) {
         if(paths.length === 0) return;
         
         const sub = paths.splice(0, 10);
         sub.forEach(path => fetchSceneTagsAsync(path, callback));
         setTimeout(() => throttle(paths, callback), 1000)
        }
        
        function writeSceneAsync(paths) {
         const callback = tags => {
         await tags = fetchSceneTagsAsync(paths[i])
         writeToFile(tags);
         }
         
         throttle(paths, callback)
        }
        
        function start() {
         const paths = loadPaths();
         writeSceneAsync(paths);
        }
        
        

        重新啟動(dòng)服務(wù),觀察了一下,大約每分鐘處理 568 張圖片,速度提升約 4 倍。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Node.js 如何利用異步提升任務(wù)處理速度

        Node.js 如何利用異步提升任務(wù)處理速度:今天在做一個(gè)小任務(wù),需要調(diào)用阿里云的圖像識(shí)別接口,對(duì) 62662 張照片進(jìn)行場(chǎng)景識(shí)別,并將結(jié)果寫到本地的 csv 文件中。 因?yàn)槿蝿?wù)很簡(jiǎn)單,沒想很多就開始碼。自從有了 async/await 之后,已經(jīng)很久不寫 callback 了,所以上手就寫成這樣: 本文所有代碼均有簡(jiǎn)化
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品黄色视频在线观看免费资源 | 国产精品另类激情久久久免费 | 91亚洲视频在线观看| 久久综合国产乱子伦精品免费| 亚洲AV永久无码精品成人| 久久精品国产大片免费观看| 亚洲成a人片在线观看中文动漫 | 午夜老司机免费视频| 亚洲6080yy久久无码产自国产| 日本一道本高清免费| 羞羞视频免费网站含羞草| 亚洲精品成人区在线观看| 丁香花在线观看免费观看图片| 亚洲AV无码一区东京热| 免费在线观看视频网站| 亚洲欧美日韩国产成人| 亚洲精品无码成人片在线观看 | 国产一级理论免费版| 狼色精品人妻在线视频免费| 亚洲毛片αv无线播放一区| 在线成人爽a毛片免费软件| 亚洲砖码砖专无区2023| 亚洲第一视频在线观看免费| 国产精品网站在线观看免费传媒| 91亚洲va在线天线va天堂va国产| 歪歪漫画在线观看官网免费阅读| 黄色大片免费网站| 国产亚洲一区二区三区在线观看| 最近最新高清免费中文字幕 | 亚洲精品国产成人99久久| 97碰公开在线观看免费视频| 亚洲国产综合AV在线观看| 久久综合亚洲色HEZYO国产| 在线观看免费中文视频| 国产精品亚洲а∨天堂2021| 亚洲AV无码久久| 日韩精品免费电影| 久久久久国产精品免费免费不卡| 亚洲www77777| 亚洲日韩精品A∨片无码| 最近中文字幕免费mv视频7|