内容简介:今天在做一个小任务,需要调用阿里云的图像识别接口,对 62662 张照片进行场景识别,并将结果写到本地的 csv 文件中。因为任务很简单,没想很多就开始码。自从有了本文所有代码均有简化,只保留关键过程
今天在做一个小任务,需要调用阿里云的图像识别接口,对 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 倍。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- V8 JavaScript 引擎 6.6 发布,异步性能大幅提升
- 闲鱼是如何利用 RxJava 提升异步编程能力的
- [译] Rust 异步编程方式重大升级:新版 Tokio 如何提升 10 倍性能详解
- SpringBoot | :异步开发之异步调用
- 改进异步封装:处理带返回值的异步调用
- 异步发展流程 —— Generators + co 让异步更优雅
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
他们以为自己很厉害:12个企业管理陷阱
[法] 克里斯蒂娜•凯德朗 / 王倩 / 人民邮电出版社 / 2018-11 / 69.00元
本书讲述了震惊世界的150个企业管理失败案例,并从产品与服务定位、技术 创新、广告与营销策略、跨文化发展、融资战略到企业文化与员工管理等众多角度, 揭露了商场各种败局的内幕。作者以风趣的笔触讲述了国际知名企业和商界精英们 的惨痛教训,又以专业角度解读了这些失利背后的经济学和管理学因素,给读者带 来了启示。一起来看看 《他们以为自己很厉害:12个企业管理陷阱》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
正则表达式在线测试
正则表达式在线测试