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

    Install

    npm i asyncme

    DownloadsWeekly Downloads

    1

    Version

    0.1.0

    License

    MIT

    Last publish

    Collaborators

    • zisismaras