2014-05-13 4 views
1

나는 webapp 개발을 위해 Node.js를 배우려고하고 있지만 작은 시스템 srcripts도 배우려고합니다. 파이썬에서는 우리가 그린 레와 멍키 패치 파이썬 STD 라이브러리를 구현하는이 라이브러리 gevent를 가지고 있습니다. 그래서 당신은 싱크 코드를 작성할 수 있고, async와 같이 작동 할 것입니다.Python의 gevent에 해당하는 Node.js는 무엇입니까?

노드와 비슷한 것이 있습니까? 나는 async와 Fibers에 대해 읽었지만 비슷한 접근법인지 이해하지 못합니다.

+1

nodejs는 설계 상 기본적으로 비동기입니다. 따라서 모든 라이브러리가 비동기 프로그래밍을 염두에두고 작성 되었기 때문에 패치 할 필요가 없습니다. 패치 할 동기화 라이브러리가 없습니다. 코드 비동기를 작성해야합니다. – mpm

+0

nodejs/javascript는 설계 상 콜백입니다. 질문은 콜백 별 디자인에서 비동기식 디자인으로, 파이썬에서 비틀어지기, gevent로 이동하는 기술에 관한 것입니다. – Alex

답변

0

gevent의 설명서에서 첫 번째 예제를 살펴보면 가장자리가 가장 두드러진 generators을 찾고 있습니다. 지원 노드 버전 (현재 불안정한 0.11)에 --harmony_generators을 전달하여 사용할 수 있습니다.

네이티브 생성기 사용은 그리 어렵지 않지만 co module을 권하고 싶습니다. 의 추가 정보에서 예 :

doSomeTaskThatReturnsAPromise() 
    .then(somethingElse) 
    .then(somethingElse) 
    .then(function() { console.log("I'm done!") }); 

.. 또는 라이브러리 등 async 등 :

async.series([ 
    doSomeTask, 
    somethingElse, 
    somethingElse 
], function() { 
    console.log("I'm done!"); 
}); 

co(function *(){ 
    var a = get('http://google.com'); // an async process 
    var b = get('http://yahoo.com'); // an async process 
    var c = get('http://cloudup.com'); // an async process 
    var res = yield [a, b, c];   // wait until these are done in a 
            // synchronous style. 
    console.log(res);     // log these objects 
})() 

다른 전통적인 옵션 (여러 라이브러리가 존재) 약속을 사용하는 것 저는 Fibers에 대한 경험이 없지만 개념적으로 Generators와 유사하다고 생각합니다.

+0

Gevent는 생성자를 사용하지 않습니다 - python 스택 저장/복원을하는 greenlet 모듈을 사용하여 코 루틴을 얻습니다. 이는 파이썬 생성기와 다르다. – Alex

+0

이것은 발전기를 사용하는 솔루션의 예입니다 (https://mail.python.org/pipermail/python-announce-list/2007-June/005908.html). 어디에서나 항복 키워드를 확인하십시오. Gevent 수정 그 greenlet 함께. – Alex

관련 문제