国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 12:19:09
字體:
供稿:網(wǎng)友

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

因為任務(wù)很簡單,沒想很多就開始碼。自從有了 async/await 之后,已經(jīng)很久不寫 callback 了,所以上手就寫成這樣:

本文所有代碼均有簡化,只保留關(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);}

運行起來以后沒問題就放著忙別的去了。過了差不多 2 小時回來一看,才跑了 17180 張圖,每分鐘 144 張。這才意識到同步速度太慢了,于是停掉進(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);}

跑了一下,直接停擺了。嗯,不能一下把請求全發(fā)出去,加一個 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);}

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 衡山县| 阿拉善右旗| 汨罗市| 武邑县| 佳木斯市| 屯门区| 绵竹市| 乌兰县| 澄江县| 祥云县| 子长县| 子洲县| 共和县| 韩城市| 新田县| 昆山市| 西盟| 随州市| 安吉县| 聂荣县| 通山县| 英吉沙县| 龙口市| 清镇市| 贡嘎县| 卢龙县| 垣曲县| 江山市| 资溪县| 铅山县| 海安县| 清涧县| 龙海市| 五寨县| 平江县| 呼图壁县| 平陆县| 沙坪坝区| 安阳县| 肃宁县| 虞城县|