Appearance
Pool de workers avec Workerpool
La bibliothèque workerpool
est une autre option populaire pour gérer un pool de workers dans Node.js. Elle offre une API simple et flexible pour la création et la gestion de workers, et supporte aussi bien le navigateur que Node.js.
Voici comment vous pouvez utiliser workerpool
pour le même exemple de tâche d'incrément :
Installation
Pour installer workerpool
via npm :
bash
npm install workerpool
npm install workerpool
Exemple d'utilisation
- Création du code du worker
Sauvegardez ce fichier en tant que worker.js
:
javascript
function increment(data) {
return data + 1;
}
// Exportation de la fonction pour l'utiliser avec workerpool
export default {
increment
};
function increment(data) {
return data + 1;
}
// Exportation de la fonction pour l'utiliser avec workerpool
export default {
increment
};
- Création du code principal utilisant
workerpool
javascript
import workerpool from 'workerpool';
const pool = workerpool.pool(__dirname + '/worker.js');
const numbers = [...Array(1000).keys()];
(async () => {
const promises = numbers.map(number => pool.exec('increment', [number]));
const results = await Promise.all(promises);
results.forEach(result => console.log(result));
pool.terminate(); // N'oubliez pas de fermer le pool une fois que vous avez terminé
})();
import workerpool from 'workerpool';
const pool = workerpool.pool(__dirname + '/worker.js');
const numbers = [...Array(1000).keys()];
(async () => {
const promises = numbers.map(number => pool.exec('increment', [number]));
const results = await Promise.all(promises);
results.forEach(result => console.log(result));
pool.terminate(); // N'oubliez pas de fermer le pool une fois que vous avez terminé
})();
La méthode pool.exec
exécute une fonction exportée du module de worker. Elle renvoie une promesse, vous permettant de gérer facilement la concurrence avec Promise.all
ou d'autres mécanismes de promesses.
workerpool
gère automatiquement le scaling du pool en fonction du nombre de cœurs CPU disponibles, mais vous pouvez aussi le configurer manuellement.