欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2019年01月07日 08:19:49   作者:全棧漸進之路  
這篇文章主要介紹了Node.js 如何利用異步提升任務(wù)處理速度,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

今天在做一個小任務(wù),需要調(diào)用阿里云的圖像識別接口,對 62662 張照片進行場景識別,并將結(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 張。這才意識到同步速度太慢了,于是停掉進程,將代碼改成下面這樣:

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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node如何將package.json中的包降為低版本或者升級為高版本

    node如何將package.json中的包降為低版本或者升級為高版本

    比如現(xiàn)在你用某個包的當前版本,但是你安裝的版本高了,那么你應(yīng)該這么做,首先刪除node項目中的node_modules目錄,防止安裝時的包不一致,下面給大家介紹node將package.json中的包降為低版本或者升級為高版本的方法,感興趣的朋友一起看看吧
    2023-11-11
  • Node.js中HTTP模塊與事件模塊詳解

    Node.js中HTTP模塊與事件模塊詳解

    這篇文章主要詳細介紹了Node.js中HTTP模塊與事件模塊的相關(guān)資料,需要的朋友可以參考下
    2014-11-11
  • 使用node.js實現(xiàn)接口步驟詳細記錄

    使用node.js實現(xiàn)接口步驟詳細記錄

    這篇文章主要給大家介紹了關(guān)于使用node.js實現(xiàn)接口步驟的相關(guān)資料,對于剛開始不會node寫接口和調(diào)用接口,可以通過這個清晰的初步了解到整個過程,下面需要的朋友可以參考下
    2023-03-03
  • 如何刪除node_modules重新安裝的方法步驟

    如何刪除node_modules重新安裝的方法步驟

    我們在開發(fā)項目的時候,每次安裝的 node 包會出現(xiàn)版本和項目所需要的版本不一致的問題,那么如何刪除node_modules重新安裝,本文就詳細的介紹一下
    2021-09-09
  • node.js調(diào)用腳本(python/shell)和系統(tǒng)命令

    node.js調(diào)用腳本(python/shell)和系統(tǒng)命令

    這篇文章介紹了node.js調(diào)用腳本(python/shell)和系統(tǒng)命令的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Node處理CPU密集型任務(wù)有哪些方法

    Node處理CPU密集型任務(wù)有哪些方法

    這篇文章主要介紹了Node處理CPU密集型任務(wù)有哪些方法,Node是一個非阻塞I/O和事件驅(qū)動的JavaScript運行環(huán)境,所以它非常適合用來構(gòu)建I/O密集型應(yīng)用,例如Web服務(wù)等
    2022-09-09
  • Node.js開發(fā)者必須了解的4個JS要點

    Node.js開發(fā)者必須了解的4個JS要點

    這篇文章主要介紹了Node.js開發(fā)者必須了解的4個JS要點,Node.js是一個面向服務(wù)器的框架,立足于Chrome強大的V8 JS引擎。盡管它由C++編寫而成,但是它及其應(yīng)用是運行在JS上的,需要的朋友可以參考下
    2016-02-02
  • 深入理解Node.js的HTTP模塊

    深入理解Node.js的HTTP模塊

    最近在工作中接觸到了Node.js標準庫提供了http模塊,所以這篇文章想總結(jié)下Node.js的HTTP模塊,方便大家和自己以后使用的時候參考借鑒。有需要的朋友們下面來一起看看吧。
    2016-10-10
  • Node.js中的HTTP請求與響應(yīng)詳解

    Node.js中的HTTP請求與響應(yīng)詳解

    本文詳細講解了Node.js中的HTTP請求與響應(yīng),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Puppeteer 爬取動態(tài)生成的網(wǎng)頁實戰(zhàn)

    Puppeteer 爬取動態(tài)生成的網(wǎng)頁實戰(zhàn)

    這篇文章主要介紹了Puppeteer 爬取動態(tài)生成的網(wǎng)頁實戰(zhàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論