UNPKG

@hirosystems/api-toolkit

Version:
54 lines (53 loc) 1.63 kB
import { EventEmitter } from 'node:events'; export type WorkerDataInterface = { workerFile: string; }; export type WorkerReqMsg<TArgs extends unknown[]> = { msgId: number; req: TArgs; }; export type WorkerRespMsg<TResp, TErr> = { msgId: number; } & ({ resp: TResp; error?: null; } | { resp?: null; error: TErr; }); export type WorkerPoolModuleInterface<TArgs extends unknown[], TResp> = { workerModule: NodeJS.Module; processTask: (...args: TArgs) => Promise<TResp> | TResp; } | { default: { workerModule: NodeJS.Module; processTask: (...args: TArgs) => Promise<TResp> | TResp; }; }; export declare class WorkerThreadManager<TArgs extends unknown[], TResp> { private readonly workers; private readonly idleWorkers; private readonly jobQueue; private readonly msgRequests; private lastMsgId; readonly workerCount: number; readonly workerFile: string; private readonly abortControlller; readonly events: EventEmitter<{ workersReady: []; }>; get idleWorkerCount(): number; get busyWorkerCount(): number; get queuedJobCount(): number; static init<TArgs extends unknown[], TResp>(workerModule: WorkerPoolModuleInterface<TArgs, TResp>, opts?: { workerCount?: number; }): Promise<WorkerThreadManager<TArgs, TResp>>; constructor(workerModule: WorkerPoolModuleInterface<TArgs, TResp>, opts?: { workerCount?: number; }); exec(...args: TArgs): Promise<TResp>; createWorkerPool(): void; private setupWorkerHandler; private assignJobs; close(): Promise<void>; }