2016-11-05 3 views
0

queue[]에서 자식 프로세스를 각각 wget 개로 분리 한 다운로드 관리자가 있습니다.node.js에있는 여러 자식 프로세스 처리

그러나 다운로드가 완료되고 콜백이 호출 된 후 queue[i]을 처리해야하지만 어떤 큐 인덱스인지는 알 수 없습니다. 프로세스가 완료되면

const EXEC_FILE = require('child_process').execFile; /** https://nodejs.org/api/child_process.html */ 

queue = []; /** array with download urls */ 

function startDownload(i){  
    var downloadProccess = EXEC_FILE(
     wget, [ queue[i] ], 
     (error, stdout, stderr) => { 

      /** callback after EXEC_FILE completed or aborted */ 
      /** HERE! How do I get the index i? */ 

    }); 
} 

startDownload(1); 
startDownload(3); 
startDownload(9); 

은 어떻게 i 값을받을 수 있나요?

+0

경고 : Node.js 멀티 스레딩은 이와 같이 사용되지 않습니다. 작업을 위해 비동기 다운로드가 더 효율적입니다. foreach 루프에서 다운로드하기 위해 '요청'모듈을 사용해보십시오. 좀 더 견고하기 위해서는 bluebird 모듈과 함께 request-promise를 사용할 수 있습니다. 이 링크는 도움이 될 것입니다, 루프에서 그것을 시도하십시오 : http://stackoverflow.com/a/11944984/3359432 –

+1

@ NidhinDavid 나는이 접근 방식으로 잘못된 것을 찾을 수없는 것 같습니다 : 무거운 작업을 메인 프로세스에서 오프로드하기 . 제가 누락 된 부분을 어떻게 사용해야하는지 조금 설명해 주시겠습니까? –

+0

@ code-jaff Node.js의 멀티 스레딩은 다른 프로그래밍 언어와 다릅니다. 당신이 다중 스레드를 할 때 실제로 Node.js 프로세스의 새로운 인스턴스를 생성합니다. 메시지 전달을 사용하여 둘 사이에서만 통신 할 수 있습니다. 그리고 Node.js에 관한 한 IO 관련 작업은 많지 않습니다. Node.js는 이런 종류의 작업을위한 것입니다. 그것이 이미지 처리라면 나는 당신과 동의 할 것이다. 그렇더라도 최선의 선택은 오프로드가 아닌 C++로 'addon'을 만드는 것이다. 더 많은 통제력을 제공합니다. –

답변

1

자바 스크립트 기능은 closures입니다. 그래서 당신은 이미 함수 본문 안에 변수 i를 가지고 있습니다.