X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fdynamic.ts;h=b4c6bddf30e8e9c964cb1038a05a7788d6bce589;hb=b9cca0059334f11740d3dfbc7bc07cd4432d1af4;hp=667fa07a29780a4837c8f5a7f3af7643c8bb61e4;hpb=1eaa679e42a2a158b38e6fd615fd04b1bf6eb694;p=poolifier.git diff --git a/src/dynamic.ts b/src/dynamic.ts index 667fa07a..b4c6bddf 100644 --- a/src/dynamic.ts +++ b/src/dynamic.ts @@ -1,10 +1,10 @@ -import FixedThreadPool, { +import { EventEmitter } from 'events' +import { + FixedThreadPool, FixedThreadPoolOptions, WorkerWithMessageChannel } from './fixed' -import { EventEmitter } from 'events' - class MyEmitter extends EventEmitter {} export type DynamicThreadPoolOptions = FixedThreadPoolOptions @@ -18,10 +18,12 @@ export type DynamicThreadPoolOptions = FixedThreadPoolOptions * @author [Alessandro Pio Ardizio](https://github.com/pioardi) * @since 0.0.1 */ -export default class DynamicThreadPool< +/* eslint-disable @typescript-eslint/no-explicit-any */ +export class DynamicThreadPool< Data = any, Response = any > extends FixedThreadPool { + /* eslint-enable @typescript-eslint/no-explicit-any */ public readonly emitter: MyEmitter /** @@ -41,8 +43,8 @@ export default class DynamicThreadPool< this.emitter = new MyEmitter() } - protected _chooseWorker (): WorkerWithMessageChannel { - let worker: WorkerWithMessageChannel + protected chooseWorker (): WorkerWithMessageChannel { + let worker: WorkerWithMessageChannel | undefined for (const entry of this.tasks) { if (entry[1] === 0) { worker = entry[0] @@ -56,14 +58,14 @@ export default class DynamicThreadPool< } else { if (this.workers.length === this.max) { this.emitter.emit('FullPool') - return super._chooseWorker() + return super.chooseWorker() } // all workers are busy create a new worker - const worker = this._newWorker() - worker.port2.on('message', (message) => { + const worker = this.newWorker() + worker.port2?.on('message', (message: { kill?: number }) => { if (message.kill) { worker.postMessage({ kill: 1 }) - worker.terminate() + void worker.terminate() // clean workers from data structures const workerIndex = this.workers.indexOf(worker) this.workers.splice(workerIndex, 1) @@ -74,5 +76,3 @@ export default class DynamicThreadPool< } } } - -module.exports = DynamicThreadPool