Асинхронный скрипт на Python с узла js - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть программа node.js, которая запускает около 50 различных экземпляров скрипта Python.Я хотел бы иметь возможность регулировать фазу - так, чтобы в любой момент времени только 4 процесса работали параллельно.

Я попробовал простой цикл, который вызывает функцию, которая запускает 4 экземпляра скрипта Python.Я использовал 60 секундную задержку, так как это среднее время, необходимое для запуска скрипта.

function startPythonScraping(){
  for(var i = 0; i < finalList.length; i++){
    setTimeout(function(){
        runFourProccesses(finalList[i]);
    }, i*60*1000);
   }
}


function runFourProccesses(stockSymbol){
    console.log("working on " + stockSymbol);
    for(var j = 0; j < 4; j++){
        if(j == 0){
            trueOrFalse = "y"
        } else {
            trueOrFalse = "n"
        }
    let secondPythonProcess = spawn('python',     ["/Users/nybgwrn/Desktop/AlphaSecWebsite/getAllData.py",     stockSymbol, (j*10).toString(), "10", trueOrFalse]);
  secondPythonProcess.stdout.on('data', (data) => {
    let messegeFromPython = JSON.stringify(data.toString('utf8')).replace("\\n", "");
            console.log(messegeFromPython + " with stock " + stockSymbol);


            
            if(messegeFromPython != "something went wrong"){
                //console.log("created file for " + symbol);
            } else {
                //console.log("couldn't create file for " + symbol + "_" + (j*10).toString() + "-" + (j*10 + 10).toString());
            }
        });
    }  
}

Это не работает, потому что каким-то образом индекс я начинаю с 50 вместо 0, а также я хочу лучшего решения, так как хочу быть уверен, что только 4 экземпляраБег.

1 Ответ

0 голосов
/ 17 сентября 2018

Обычно это делается с помощью семафоров. Семафор - это, по сути, пул блокировок, поэтому можно одновременно удерживать несколько блокировок.

В вашем случае вы можете использовать этот пакет и обернуть каждый процесс python, порождаемый sem.take и sem.leave.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...