Node.js의 멀티태스킹 - 하위 프로세스 검토

7887 단어 node


[ by Can Ho on DZone에서 가져온 이미지 ] 이 문서에서는 교육 목적으로만 사용됩니다!


워밍업하자



위의 표지 이미지를 참조하여 각 메서드를 호출하면 EventEmitter를 구현하는 Child 프로세스 클래스에서 시작된 Child 프로세스 개체 인스턴스가 반환되므로 이러한 스트림 기반 개체 인스턴스는 .on를 직접 등록할 수 있습니다. 하위 프로세스 클래스(모듈)에서 EventEmitter를 상속하므로 이벤트 리스너입니다. 이제 따뜻해졌으니 바로 이 기사의 주제로 넘어가겠습니다.

Node.js의 프로세스



상위 프로세스는 여러 하위 프로세스*를 가질 수 있지만 하위 프로세스는 단 하나의 상위 프로세스[1]만 가질 수 있습니다. Node.js 프로세스가 다른 프로그램을 시작하도록 하려면 child_process 모듈[2]만 살펴보십시오. 장기 실행 작업을 처리하는 것 외에도 이 모듈은 OS와 인터페이스하고 셸 명령을 실행할 수 있습니다[3]. 평신도의 관점에서 보면 Git, Python, PHP 또는 기타 프로그래밍 언어일 수 있으므로 Node.js 자식 프로세스에서 PHP의 경우 [ read this ] . 운영 체제는 많은 기능에 대한 액세스를 제공하지만 대부분은 명령줄을 통해서만 액세스할 수 있습니다...

It would be nice to be able to access this functionality from a Node application . That’s where child processes come into place .




기본(일명 부모) 프로세스에서 stdin은 읽을 수 있는 스트림(입력)이고 stdout 및 stderr 쌍은 쓰기 가능한 스트림(출력)입니다. 모두 stdio로 인식됩니다. [Matt Eddy on], 자식 프로세스(들)에서는 완전히 반대입니다. 즉, 자식 프로세스의 stdin도 입력이지만 후속 쓰기 가능한 스트림으로 소비됩니다. 여기서 stdout 및 stderr 쌍은 출력이지만 읽을 수 있는 것으로 생성됩니다. 개울 . **언급할 가치가 있음, stdin, stdout & stderr POSIX의 일부입니다. 용어 .


Node.js를 사용하면 자식 프로세스 내에서 시스템 명령을 실행하고 입/출력(I/O)을 수신할 수 있습니다. 이를 통해 개발자는 명령에 인수를 전달할 수 있고 한 명령의 결과를 다른 명령으로 파이프할 수도 있습니다[4]. 파이핑의 관점에서 볼 때, 그것은 두 개 이상의 스트림을 하나의 체인으로 연결하는 것에 관한 것입니다. 파이프(/-ing)는 정의상 단방향[5]이기 때문에 읽기 가능하거나 쓰기 가능한 스트림일 수 있습니다. ) . 주의: child processes 내부적으로 파이프 활용을 구현합니다. 물론 pipe() 명시적으로도 사용할 수 있습니다.

Node.js에서 사용되는 하위 프로세스 요소를 검토할 시간이므로 더 나아갈 수 있습니다(아래 링크).

Child process factors (G-Drive shareable – read only)



Child process factor 에서 확인했듯이 Python 자체에 대해 Node.js 하위 프로세스로 실행할 소스 코드를 살펴보겠습니다. 우리 모두는 Python이 기계 학습 알고리즘, 딥 러닝 알고리즘 및 Node.js에 없는 많은 기능을 제공한다는 것을 알고 있습니다. 다행스럽게도 하위 프로세스 덕분에 Node JS 응용 프로그램에서도 땀을 흘리지 않고 악용할 수 있습니다(여기서는 다루지 않음). 현재 이 글) . 다음 자식 프로세스 소개 예제를 살펴보겠습니다.

단 하나의 전제 조건:
컴퓨터에 Python이 설치되어 있어야 합니다 – 실행하려면 PATH(Windows)를 추가하는 것을 잊지 마십시오(설치하는 동안 체크해야 함).

이제 다음과 같은 프로젝트 루트 구조를 고려하십시오.

├─Project-root
├───index.js
├───hello-world-again.py
└───package.json, node_modules, etc.


이내 hello-world-again.py 다음과 같은 일부 Python 관련 소스 코드를 추가합니다.

print("Hello, World from .py!")


이제 index.js에 다음 코드를 추가합니다.

const { spawn } = require("child_process");

let child_process_1 = spawn('python', ["./hello_world_again.py"])

child_process_1.stdout.on("data", (data) => {
console.log(`stdout: ${data}`);
});
child_process_1.stderr.on("data", (data) => {
console.error(`stderr: ${data}`);
});
child_process_1.on("close", (code) => {
console.log(`child process exited with code ${code}`);
});

// Expected output : 
/*
stdout: Hello, World from .py!

child process exited with code 0
*/



지금은 여기까지입니다 . 오타가 있거나 제안 사항이 있으면 아래 댓글 섹션에 남겨주세요. 감사합니다. 다음에서 뵙겠습니다!


참조:

[1] tutorialspoint.com/process-vs-parent-process-vs-child-process

[2] nodejs.org/en/knowledge/child-processes

[3] digitalocean.com/how-to-launch-child-processes

[4] Learning Node by Shelley Powers

[5] Child process by K.V. Gaurav

[6] Python in Node.js on G4G

[7] Child Process in Nodejs

좋은 웹페이지 즐겨찾기