task-farmer
Version:
A simple multi-core task scheduler that works well with promises. Great for doing parallel data processing.
50 lines (49 loc) • 1.39 kB
TypeScript
/// <reference types="node" />
import * as cluster from "cluster";
import { IScheduler } from "./scheduler";
import { ITask } from "./task";
export interface IClusterSchedulerOptions {
verbose?: boolean;
maxAllocations?: number;
}
export interface IWorkerRecord {
workerIndex: number;
workerId: string;
allocations: number;
maxAllocations: number;
worker: cluster.Worker;
}
export interface IWorkerMap {
[index: string]: IWorkerRecord;
}
export interface ITaskRecord {
inputs: any[];
taskId: string;
taskName: string;
resolve: (result: any) => void;
reject: (error: any) => void;
}
export interface ITaskMap {
[index: string]: ITaskRecord;
}
export declare class ClusterScheduler implements IScheduler {
private enableVerboseLogging;
private maxAllocations;
private numWorkers;
private workers;
private workerMap;
private taskQueue;
private pendingTasks;
private whoami;
constructor(numWorkers: number, options?: IClusterSchedulerOptions);
init(mainFn: () => Promise<void>): Promise<void>;
runTask(inputs: any[], task: ITask<any>): Promise<any>;
private sendTask;
private queueTask;
private verbose;
private trackWorker;
private initWorker;
private scheduleTask;
private scheduleTasks;
private shutdownWorkers;
}