@gzzhanghao/worker-farm
v0.1.0
Published
A worker farm that works
Readme
WorkerFarm
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
Usage
Install the worker farm with:
npm i -S @gzzhanghao/worker-farmThen you should be able to import the worker farm:
const createFarm = require('@gzzhanghao/worker-farm').defaultAPI
createFarm(modulePath: string, opts: Object): WorkerFarm
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.
workerFarm.fillUp(): void
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.
workerFarm.addWorker(): void
Add a worker to the worker farm. Throws if there are already options.maxConcurrentWorkers workers in the farm.
workerFarm.layoff(): void
Dismiss an idle worker, or dismiss the next worker that finished its task if all workers are busy at the moment.
workerFarm.run(args = [], method = null): Promise<any>
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(): void
Close the farm once it finished all pending tasks.
destroy(): void
Destroy the worker farm immediately. This method will reject all unfinished tasks.
Example
'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 able JSON-serializable
throw { message: error.message, stack: error.stack }
}
}