import { EventEmitter } from 'node:events';
import { SHARE_ENV, Worker } from 'node:worker_threads';
+import type { ThreadPoolOptions } from 'poolifier';
+
import { WorkerAbstract } from './WorkerAbstract';
import { WorkerConstants } from './WorkerConstants';
import {
} from './WorkerTypes';
import { sleep } from './WorkerUtils';
+const DEFAULT_POOL_OPTIONS: ThreadPoolOptions = {
+ enableEvents: true,
+ restartWorkerOnError: true,
+};
+
export class WorkerSet extends WorkerAbstract<WorkerData> {
public readonly emitter!: EventEmitter;
private readonly workerSet: Set<WorkerSetElement>;
* @param workerScript -
* @param workerOptions -
*/
- constructor(workerScript: string, workerOptions?: WorkerOptions) {
+ constructor(workerScript: string, workerOptions: WorkerOptions) {
super(workerScript, workerOptions);
this.workerOptions.poolOptions = {
- ...{
- enableEvents: true,
- restartWorkerOnError: true,
- },
+ ...DEFAULT_POOL_OPTIONS,
...this.workerOptions.poolOptions,
};
this.workerSet = new Set<WorkerSetElement>();
}
const workerSetElement = await this.getWorkerSetElement();
workerSetElement.worker.postMessage({
- id: WorkerMessageEvents.startWorkerElement,
+ event: WorkerMessageEvents.startWorkerElement,
data: elementData,
});
++workerSetElement.numberOfWorkerElements;