Yet another worker-farm. Check out node-worker-farm for production usage.
WARNING: This package is under heavy development and should be considered unstable, use it at your own risk
Install the worker farm with:
npm i -S @gzzhanghao/worker-farm
Then you should be able to import the worker farm:
const createFarm = require('@gzzhanghao/worker-farm').default
Create a worker farm with modulePath
and options
. The modulePath
should be an absolute path to the the module that runs in workers.
Available options are:
{
maxConcurrentWorkers : require('os').cpus().length,
maxConcurrentCalls : Infinity,
maxCallTime : Infinity,
maxRetries : Infinity,
autoStart : true,
}
Check out node-worker-farm
's documentation for more details.
Fill up the worker farm with workers. It will keep adding workers to the worker farm until there are options.maxConcurrentWorkers
workers in the farm.
Add a worker to the worker farm. Throws if there are already options.maxConcurrentWorkers
workers in the farm.
Dismiss an idle worker, or dismiss the next worker that finished its task if all workers are busy at the moment.
Run a task with the worker farm. The worker farm will invoke the method
function exported by the module specified by the modulePath
. If method
is not specified, it will invoke the method exported by module.exports
instead.
Close the farm once it finished all pending tasks.
Destroy the worker farm immediately. This method will reject all unfinished tasks.
'use strict'
const babel = require('babel-core')
module.exports = (content, opts) => {
try {
// or return a Promise for async tasks
return babel.transform(content, opts).code
} catch (error) {
// values should be JSON-serializable
throw { message: error.message, stack: error.stack }
}
}