import { Log } from 'ts-tiny-log'; import { Worker } from './worker'; export interface PoolOptions { /** * Number of workers. Default is 4 */ nWorkers?: number; /** * Worker entry file. Must be a relative/absolute path/file */ workerEntry: string; /** * Queue name that this pool serves */ queueName: string; /** * Class for communicating Parent -> Worker */ workerType?: typeof Worker; /** * Error handler callback */ error?: (err: Error) => void | Promise; } /** * Worker pool that manages a set of workers for a queue * * @typeParam TIn Queue task input type * @typeParam TOut Queue task output type */ export declare class Pool { protected log: Log; protected workers: Worker[]; protected options: PoolOptions; constructor(options: PoolOptions); /** * Initialize the pool by spawning the initial worker set * * @returns Promise that resolves when all workers are spawned */ initialize(): Promise; /** * Reserve and return a free worker * * @returns The worker, or null if none are available */ reserve(): Promise>; /** * Mark a worker as free (available for next task) * * @param worker Worker to release */ release(worker: Worker): void; /** * Get the current number of workers in the pool * * @returns Number of workers */ getWorkerCount(): number; /** * Spawn a new worker thread * * @returns The spawned worker */ protected spawnWorker(): Promise>; }