asyncme

0.1.0 • Public • Published

AsyncMe

Turn blocking code to asynchronous functions

Usage

const asyncme = require("asyncme")({poolSize: 1, disposable: true});
 
asyncme.run(function(start) {
    //blocking code
    for (var i=0; i<=100000000; i++) {
        start += i;
    }
    return start; //always return the result
}, 10) //that's how you pass parameters
.then(function(result) {
    console.log("total:", result);
})
.catch(function(err) {
    console.error(err);
});
 
console.log("I am unblocked!");

Options

poolSize How many workers to spawn. Defaults to cpu core count. Pass 0 for none.
disposable Kill each worker as soon as its work is completed. Defaults to false

Methods

run(task<function>, [...args]) => <Promise>
Pass a function with the blocking code plus any optional arguments.
Always return the result from inside the function.
spawn([count=1]<Number>) => <asyncMeInstance>
Add workers on demand. Defaults to 1. Returns the instance.
exit() => <Promise>
Gracefully kill all the workers when their work is completed. The promise is resolved when all the workers have been killed. exitNow() => <Promise>
Immediately kill all the workers without waiting. The promise is resolved when all the workers have been killed.

Properties

_workers
The internal pool of workers (child processes).

Examples

There are many examples in the examples folder showing many possible situations like running parallel tasks, throwing errors, killing the workers and limitations.

Notes

The workers are child processes spawned with process.fork() and the communication is made using standard node process messaging.
The task functions are serialized and then executed on the child process using the Function constructor which will practically eval() the function, so keep that in mind and don't pass unsafe code.
Tested on the current node LTS (v6.9.5). Uses many es6 features so older node versions might not work.

Limitations

Doesn't work on the browser.
Can't use require() inside the tasks.
External scope is not transfered.
Asynchronous code won't be properly handled (the promise will resolve and/or the worker might be dead before it is completed).
Check the examples/wontWork.js

License

MIT

Package Sidebar

Install

npm i asyncme

Weekly Downloads

0

Version

0.1.0

License

MIT

Last publish

Collaborators

  • zisismaras