Paratask is a tool that will execute your code in parallel using the full potential of multi-process programming. In contrast to asynchronous task management, Paratask will create a child Node/io.js process in which your task function will 'live'.
Note: Scope dependency injection is at your service. More into in the examples below.
Note: This modules uses ES5 "callback" style. If you're more into the Promises/A+ standard you can use paratask-promises
You can install Paratask with the Node Package Manager:
npm install paratask
or by getting it from this repo.
Paratask uses only native Node/io.js modules that do not need additional installation: fs
and child_process
.
Both task_1
and task_2
will fork a new Node/io.js process and will run concurrently.
When both call callback()
, the final results will be printed in the console.
Note: scope
property is your dependency injector. Can only be a valid JSON.parse()
value (i.e. no functions allowed).
var paratask = require('paratask');
var task_1 = {
fork: function (callback) {
// Some calculation using the 'count' scope var
var result = count * 10;
callback(null, result);
},
scope: {
count: 10
}
};
var task_2 = {
fork: function (callback) {
// Some calculation using the 'count' scope var
var result = count * 10;
callback(null, result);
},
scope: {
count: 20
}
};
paratask([ task_1, task_2 ], function (error, results) {
console.log( error ); // null
console.log( results ); // [100, 200], 1st task result will be always the 1st in the results array even if completed last
});
Both task_1
and task_2
will fork a new process but
when task_2
call callback('Error message')
both processes will be killed and the final callback will be executed.
Note: scope
property is optional.
var paratask = require('paratask');
var task_1 = {
fork: function (callback) {
var count = 1000000000;
var factorial = 1;
while (--count) factorial *= count;
callback(null, factorial);
}
};
var task_2 = {
fork: function (callback) {
callback('Error message');
}
};
paratask([ task_1, task_2 ], function (error, results) {
console.log( error ); // 'Error message'
console.log( results ); // [], the results array may not have any data saved since one task error will kill all forked tasks
});
A palette of comparison tests between paratask()
, async.parallel()
, and process.nextTick()
are available in ./tests
folder.
node tests/async_heavy_test.js
node tests/process_nextTick_heavy_test.js
node tests/paratask_heavy_test.js
Paratask is great when you have several time consuming task functions with few external dependencies. In such cases, multi-processing is the best approach. When you want to manage several relevantly quick functions with asynchronous logic, async will handle it with beauty.