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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:43:29
字體:
來源:轉載
供稿:網友

今天在做一個小任務,需要調用阿里云的圖像識別接口,對 62662 張照片進行場景識別,并將結果寫到本地的 csv 文件中。

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

本文所有代碼均有簡化,只保留關鍵過程

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 張。這才意識到同步速度太慢了,于是停掉進程,將代碼改成下面這樣:

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);}

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持錯新站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 阿巴嘎旗| 汨罗市| 太仓市| 大同县| 陵水| 务川| 临泉县| 黑山县| 芦山县| 台前县| 商城县| 罗甸县| 泰顺县| 宁波市| 荥阳市| 无棣县| 璧山县| 江油市| 凯里市| 宜良县| 兴业县| 彭州市| 沛县| 台北县| 普兰县| 昭觉县| 汽车| 永泰县| 那曲县| 辽中县| 民县| 安福县| 四川省| 兴山县| 广安市| 日喀则市| 苍梧县| 黄浦区| 刚察县| 麻阳| 遂昌县|