【问题标题】:Async python script from node js来自节点 js 的异步 python 脚本
【发布时间】:2018-09-17 09:36:03
【问题描述】:

我有一个 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 个实例正在运行。

【问题讨论】:

    标签: javascript python asynchronous


    【解决方案1】:

    这通常使用信号量来完成。信号量基本上是一个锁池,因此可以同时持有多个锁。

    在您的情况下,您可以使用this package 并使用sem.takesem.leave 包装每个生成的python 进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2018-09-03
      相关资源
      最近更新 更多