- public async start(): Promise<void> {
- await this.startWorker();
- // Start worker sequentially to optimize memory at startup
- await Utils.sleep(Constants.START_WORKER_DELAY);
+ private addWorkerSetElement(): WorkerSetElement {
+ const worker = new Worker(this.workerScript, {
+ env: SHARE_ENV,
+ ...this.workerOptions.poolOptions?.workerOptions,
+ });
+ worker.on(
+ 'message',
+ this.workerOptions.poolOptions?.messageHandler ?? WorkerConstants.EMPTY_FUNCTION,
+ );
+ worker.on(
+ 'error',
+ this.workerOptions.poolOptions?.errorHandler ?? WorkerConstants.EMPTY_FUNCTION,
+ );
+ worker.on('error', (error) => {
+ this.emitter?.emit(WorkerSetEvents.error, error);
+ if (this.workerOptions.poolOptions?.restartWorkerOnError) {
+ this.addWorkerSetElement();
+ }
+ });
+ worker.on(
+ 'online',
+ this.workerOptions.poolOptions?.onlineHandler ?? WorkerConstants.EMPTY_FUNCTION,
+ );
+ worker.on(
+ 'exit',
+ this.workerOptions.poolOptions?.exitHandler ?? WorkerConstants.EMPTY_FUNCTION,
+ );
+ worker.once('exit', () =>
+ this.removeWorkerSetElement(this.getWorkerSetElementByWorker(worker)!),
+ );
+ const workerSetElement: WorkerSetElement = { worker, numberOfWorkerElements: 0 };
+ this.workerSet.add(workerSetElement);
+ return workerSetElement;