settimeout递归循环问题
发布于 8 年前 作者 oyosc 4320 次浏览 来自 问答

大概代码就是使用settimeout递归循环不断获取数据,并将所得到的数据不断存到全局变量数组里去,程序在运行到3千次左右,会发生进程卡住不动了,请问这个是什么原因呢?

5 回复

代码放出来看看呢,原则上是不会有这样的问题的

@hyj1991 github传送门这个我是里面用子进程获取数据,然后通过全局数组进行保存,再送入机器学习

@oyosc 太长了。。。你贴点定时器获取数据的核心代码出来就行了

@hyj1991 ’var processData = function(){

        if(numberOfTrades<machineData.length && numberOfTrades+ batchSize<machineData.length){
            i++;
            console.log("count:", i);
            var arry = [];
            for(var j = numberOfTrades; j<machineData.length&&j<batchSize+numberOfTrades; j++){
                arry.push(machineData[j]);
            }
            var reward = 0;
            var action = brain.forward(arry);
            console.log("j=" + j);
            if(j < machineData.length){
                if(actions[action] == 'BUY'){
                    numberOfActualTrades += 1;
                    reward += parseFloat(machineData[j][5] - machineData[j][2]);
                }
                if(actions[action] == 'SELL'){
                    numberOfActualTrades += 1;
                    reward += parseFloat(machineData[j][5] - machineData[j][2]);
                }
                if(reward>0){
                    positiveTrades += 1;
                }
                numberOfTrades += 1;
                brain.backward(reward);//此处是机器学习代码
                console.log('numberOfTrades is ' + numberOfTrades);
                console.log('numberOfActualTrades is ' + numberOfActualTrades);
                console.log('positiveTrades is ' + positiveTrades);
            }
            else{
                numberOfTrades = 0;
            }
        }
        setTimeout(processData, 1000);
    }

processData();’

多的可能是超出调用栈了,或者发起的异步操作太多阻塞了。 建议你用 async.forever(taskFn, function(error) { }) 来实现你的代码。 taskFn 处理完异步任务以后,用setTimeout 设置一下过一会儿在调用callback

回到顶部