Refactor spawnWorkers (#3338)

This commit is contained in:
Aya Morisawa 2018-11-20 12:25:58 +09:00 committed by GitHub
parent 4a77548672
commit 168db6891f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 23 deletions

View File

@ -219,31 +219,21 @@ function checkMongoDb(config: Config) {
}); });
} }
function spawnWorkers(limit: number) { async function spawnWorkers(limit: number) {
Logger.info('Starting workers...'); const workers = Math.min(limit, os.cpus().length);
Logger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`);
await Promise.all([...Array(workers)].map(spawnWorker));
Logger.succ('All workers started');
}
function spawnWorker(): Promise<void> {
return new Promise(res => { return new Promise(res => {
// Count the machine's CPUs const worker = cluster.fork();
const cpuCount = os.cpus().length; worker.on('message', message => {
if (message !== 'ready') return;
const count = limit || cpuCount; Logger.succ('A worker started');
let started = 0; res();
});
// Create a worker for each CPU
for (let i = 0; i < count; i++) {
const worker = cluster.fork();
worker.on('message', message => {
if (message !== 'ready') return;
started++;
// When all workers started
if (started == count) {
Logger.succ('All workers started');
res();
}
});
}
}); });
} }