Node.js批处理

Ste*_*hev 5 batch-processing node.js

有点概念上的问题

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

试图在Node中解决这个问题,但是总的来说我错过了如何实现的想法

小智 6

这种类型的处理更准确的名称可能是“有限并行执行”。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++;
  }
}
Run Code Online (Sandbox Code Playgroud)