X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fworker%2Fabstract-worker.ts;h=b8b442ecd2c0e2521a2c82b899620aa22197fbd7;hb=75d3401a50550a9fc53e2e7d107bc2d776df83e3;hp=7d81a88ccc816803bcdcdae4f89cb9dd56486f51;hpb=49d1b48ce81c9f195830a1a886657de6f2de4ca4;p=poolifier.git diff --git a/src/worker/abstract-worker.ts b/src/worker/abstract-worker.ts index 7d81a88c..b8b442ec 100644 --- a/src/worker/abstract-worker.ts +++ b/src/worker/abstract-worker.ts @@ -55,7 +55,7 @@ export abstract class AbstractWorker< /** * Handler id of the `aliveInterval` worker alive check. */ - protected readonly aliveInterval?: NodeJS.Timeout + protected aliveInterval?: NodeJS.Timeout /** * Constructs a new poolifier worker. * @@ -88,12 +88,6 @@ export abstract class AbstractWorker< this.checkWorkerOptions(this.opts) this.checkTaskFunctions(taskFunctions) if (!this.isMain) { - this.lastTaskTimestamp = performance.now() - this.aliveInterval = setInterval( - this.checkAlive.bind(this), - (this.opts.maxInactiveTime ?? DEFAULT_MAX_INACTIVE_TIME) / 2 - ) - this.checkAlive.bind(this)() this.mainWorker?.on('message', this.messageListener.bind(this)) } } @@ -151,7 +145,13 @@ export abstract class AbstractWorker< * @param message - Message received. */ protected messageListener (message: MessageValue): void { - if (message.id != null && message.data != null) { + if (message.dynamic === true) { + // Worker dynamic message received + this.startCheckAlive() + } else if (message.statistics != null) { + // Statistics message received + this.statistics = message.statistics + } else if (message.id != null && message.data != null) { // Task message received const fn = this.getTaskFunction(message.name) if (isAsyncFunction(fn)) { @@ -159,9 +159,6 @@ export abstract class AbstractWorker< } else { this.runInAsyncScope(this.runSync.bind(this), this, fn, message) } - } else if (message.statistics != null) { - // Statistics message received - this.statistics = message.statistics } else if (message.kill != null) { // Kill message received this.aliveInterval != null && clearInterval(this.aliveInterval) @@ -169,6 +166,15 @@ export abstract class AbstractWorker< } } + private startCheckAlive (): void { + this.lastTaskTimestamp = performance.now() + this.aliveInterval = setInterval( + this.checkAlive.bind(this), + (this.opts.maxInactiveTime ?? DEFAULT_MAX_INACTIVE_TIME) / 2 + ) + this.checkAlive.bind(this)() + } + /** * Returns the main worker. * @@ -243,7 +249,9 @@ export abstract class AbstractWorker< id: message.id }) } finally { - !this.isMain && (this.lastTaskTimestamp = performance.now()) + if (!this.isMain && this.aliveInterval != null) { + this.lastTaskTimestamp = performance.now() + } } } @@ -281,7 +289,9 @@ export abstract class AbstractWorker< }) }) .finally(() => { - !this.isMain && (this.lastTaskTimestamp = performance.now()) + if (!this.isMain && this.aliveInterval != null) { + this.lastTaskTimestamp = performance.now() + } }) .catch(EMPTY_FUNCTION) }