Использование кластера в модуле Node

ОБНОВИТЬ: Даже если этот конкретный сценарий не является реалистичным, согласно комментариям, мне все еще интересно, как можно написать модуль, который использует кластеризацию, не перезапуская родительский процесс каждый раз.

Я пытаюсь написать модуль Node.js под названиемmass-request это ускоряет большое количество HTTP-запросов, распределяя их по дочерним процессам.

Я надеюсь, что снаружи это работает так.

var mr = require("mass-request"),
    scraper = mr();

for (var i = 0; i < my_urls_to_visit.length; i += 1) {
    scraper.add(my_urls_to_visit[i], function(resp) {
        // do something with response
    }
}

Для начала я собрал скелет для модуля массового запроса.

var cluster = require("cluster"),
    numCPUs = require("os").cpus().length;

module.exports = function() {
    console.log("hello from mass-request!");
    if (cluster.isMaster) {
        for (var i = 0; i < numCPUs; i += 1) {
            var worker = cluster.fork();             
        }

        return {
            add: function(url, cb) {}       
        }       
    } else {
        console.log("worker " + process.pid + " is born!");
    }  
}

Затем я проверяю это так в тестовом скрипте:

var m = mr();
console.log("hello from test.js!", m);

Я ожидал увидеть "привет от массовой просьбы!" залогинился четыре раза (как на самом деле). К моему изумлению, я также вижу «привет из test.js» четыре раза. Понятно, я не понимаю, какcluster.fork() работает. Это перезапускает весь процесс, а не только функцию, которая вызывает его в первый раз?

Если да, то как можно использовать кластеризацию в модуле, не беспокоя человека, который использует этот модуль с грязной многопроцессорной логикой?

Ответы на вопрос(2)

Ваш ответ на вопрос