A Thread pool for nodejs worker-threads. It relies on the generic-pool library to handle the resource management.
npm install thread-pool-node
or with yarn:
yarn add thread-pool-node
// index.js
const createPool = require('thread-pool-node')
const pool = createPool({
workerPath: './path/to/worker.js',
workerOptions: {
workerData: {
magicNumber: 42
}
},
poolOptions: { // passed to generic-pool
min: 2,
max: 4
}
})
const worker = await pool.acquire();
const onMessage = result => {
// do something with the result
console.log({ result });
// release back to thread pool
pool.release(worker);
worker.removeListener("message", onMessage);
};
worker.on("message", onMessage);
worker.postMessage(args);
// worker.js
const { parentPort, workerData } = require("worker_threads");
parentPort.on("message", message => {
parentPort.postMessage(aCPUBoundTask(workerData.magicNumber))
});
createPool
: Creates a new worker-threads pool according to the given pool optionsasync Pool#acquire
- Returns a new ready to be used worker from the pool.async Pool#release
- Releases the worker back to the pool.
For info on how to configure the pool to meet your needs, and more useful pool APIs, see generic-pool