2015-01-27 5 views
0

일부 CPU 반복 작업을 수행하는 서버 응용 프로그램에서 하위 프로세스를 포크 할 때마다 모든 반복에서 상태 값이 Redis로 푸시됩니다.Node.js child_process.fork()가 완료 될 때까지 Redis 데이터가 표시되지 않습니다.

문제는 상태 값이 하위 프로세스가 완료 될 때까지 Redis에 표시되지 않기 때문에 마지막 상태 값만 가져올 수 있다는 것입니다.

클라이언트 앱에서 상태 값을 폴링합니다.

나는 Redis 클라이언트로 node_redis를 사용하고 있습니다.

redis-cli에서도 하위 프로세스가 완료되기 전에 상태 값이 존재하지 않음을 확인했습니다.

부모 (서버 응용 프로그램) :

child_process.fork('child.js') 

아이 (서버 응용 프로그램) :

for (...) { 
    //CPU-bound work 
    redisClient.hset(key, field, value) 
} 

클라이언트 응용 프로그램 :

(function poll() { 
    //wait 
    redisClient.hget(key, field) 
    poll() 
})() 

답변

0

변화 시도

async.eachSeries(data, function(element, next) { 
    //do cpu bound work on element 
    redisClient.hset(key, field, value, next); // wait for callback before starting next work 
}, function(err) { 
    console.log('done'); 
}); 

에 아이 코드는 루프에 대한 그냥 계속하고 상태를 업데이트 할 수있는 기회를 얻을 것이다 일이 무엇 hset 명령 콜백 기다릴 수없는 경우. 필요에 따라 더 나은 async. * 방법을 사용해야 할 수도 있습니다.

+0

단순히 Redis 명령의 콜백을 사용하여 해결되었습니다. 비동기 라이브러리 사용에 대한 귀하의 제안을 보았을 때, 저는 제 상황에서 그렇게 생각하지 않습니다. 어쨌든 고마워! –