andywer / andywer/threads.js

expose `size` in `spawnWorker` callback

Ouverte
#354 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement
Langage dominant
TypeScript
Étoiles
3.5k
Forks
173
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

I'm trying to send the thread count to every worker. There are certain timeouts, like [file locks](https://www.npmjs.com/package/lockfile), used for allowing only one thread in at a time. I have the lock wait timeout set to a multiplier based on how many threads are running.

I was trying to do this:

```js
let threads;

function spawnWorker() {
return spawn(new Worker('foo', {
env: {
...process.env,

// useful for calculating timeouts based on how many other tasks are running
THREADS: threads,
},
}));
}

let pool = Pool(spawnWorker);

threads = pool.workers.length;
```

but since the initial pool spawning is synchronous, the env var gets hit before the `threads = pool.workers.length;` line.

My work around is of course:

```js
THREADS: require('os').cpus().length,
```

but I would prefer to be directly tied to your value so they are always in sync.

My proposition is the send the pool size down to the `spawnWorker` callback.

This:

```js
function spawnWorkers(spawnWorker, count) {
return createArray(count).map(() => ({
init: spawnWorker(),
runningTasks: []
}));
}
```

becomes

```js
function spawnWorkers(spawnWorker, count) {
return createArray(count).map(() => ({
init: spawnWorker(count),
runningTasks: []
}));
}
```

and my code becomes

```js
function spawnWorker(size) {
return spawn(new Worker('foo', {
env: {
...process.env,

// useful for calculating timeouts based on how many other tasks are running
THREADS: size,
},
}));
}
```

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.