node.js - Node.js批处理

标签 node.js batch-processing

一些概念性的问题

我有 15 个(例如)文件需要处理。但我不想一次处理一个。相反,我想开始处理其中的 5 个(顺序不重要的任何 5 个),只要这 5 个文件中的一个被处理,另一个文件就可以开始。这个想法是同时处理最多 5 个文件,直到处理完所有文件。

试图在 Node 中解决这个问题,但总的来说我不知道​​如何实现它

最佳答案

此类处理的更准确名称可能是“有限并行执行”。 Mario Casciaro 在他的书 Node.js 设计模式(从第 77 页开始)中对此进行了很好的介绍。此模式的一个用例是当您想要控制一组可能导致过载的并行任务时。下面的例子来自他的书。

有限并行执行模式

function TaskQueue(concurrency) {
  this.concurrency = concurrency;
  this.running = 0;
  this.queue = [];
}

TaskQueue.prototype.pushTask = function(task, callback) {
  this.queue.push(task);
  this.next();
}

TaskQueue.prototype.next = function() {
  var self = this;
  while(self.running < self.concurrency && self.queue.length) {
    var task = self.queue.shift();
    task(function(err) {
      self.running--;
      self.next();
    });
    self.running++;
  }
}

关于node.js - Node.js批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39564675/

相关文章:

javascript - 要求内部新功能

javascript - 如何转义像 "\\r\\n "这样的清理字符串

c# - NServiceBus 批处理长时间运行的作业

batch-processing - BigQuery - 从 UI 提交时相同的查询有效,并从批处理报告 SQL 语法错误

windows - 如何使用 Windows 批处理脚本从文件夹 'A' 中删除文件夹 'B' 中不存在的所有文件/文件夹?

javascript - 使用 Node JS 抓取网站的 javascript 变量

javascript - 确定 Node 流是否处于 objectMode

c# - 访问 Web 应用程序数据库的批处理电子邮件过程的最佳方法

node.js - 在 toJSON sequelize 中自定义返回的外键对象

java - 在 hibernate 中插入大量记录的最佳方法