mgr

*For easily managing slave processes.*

Usage no npm install needed!

<script type="module">
  import mgr from 'https://cdn.skypack.dev/mgr';
</script>

README

mgr

Easier multithreading for Node.

Travis branch npm npm

Why?

Because multi-threaded node applications are unwieldy to work with, and I needed to work with them.

API

.job

Used by new child processes to expose functions (tasks) to parent processes.

It takes two arguments:

  • The name of the job (case sensitive).
  • A function to call when it's ready.
import { job } from 'mgr'

job('compute PI', () => {
    // do stuff
})

Jobs will only run when called by their parent process, and must always return a promise. If you've got a sweet Babel setup, I recommend using async functions. They're way nicer and crafted from unicorn tears.

job('do things', async (name) => {
    // things
    return 10 // Automagically promisified.
})

When a job finishes, the value is sent to the parent process (same goes for errors).

.Fork

Fork creates a new child node process and aims it at a file path you pass it. Any jobs declared by the child process can be run through Fork.

Paths must be absolute.

// Import the Fork class.
import { Fork } from 'mgr'

// The absolute path to a .js file.
const file = `${__dirname}/slave-code.js`

// Spawns a new process.
const slave = new Fork(file)

fork.run

Starts a job in the child process, returning a promise.

Job names are case-sensitive.

slave.run('compute PI')
    .then(console.log)
    .catch((error) => console.log('Oh noes!'))

If the job is expecting arguments, you can pass one immediately after the job name.

slave.run('encrypt', {
  data: 'Nuclear launch codes: ...',
  phrase: 'potatoes are lovely',
}).then((result) => console.log(result))

To keep stuff simple, only one argument is allowed.

Installing

From npm

$ npm install mgr --save

From GitHub

$ git clone https://github.com/PsychoLlama/mgr.git
$ cd mgr
$ npm install
$ npm run build

Running tests

First, install from GitHub. npm only has the compiled code.

Be sure to run the build first:

# Run once.
$ npm run build

# OPTIONAL: watch for changes.
$ npm run build -- --watch

Now you can run the tests.

$ npm test

mgr
Abbreviation, "manager"