2011-08-17 5 views
3

방금 ​​coroutines 작업을 시작했으며 gevent 및 greenlets에 대해 읽었습니다. 테스트를 위해 나는 gevents의 pywsgi 모듈을 통해이 코드를 역임 :Gevent 및 WSGI로 통화 차단

from gevent.pywsgi import WSGIServer 
import gevent 

def hello_world(env, start_response): 
    gevent.sleep(5) 
    start_response('200 OK', [('Content-Type', 'text/html')]) 
    return ["<b>hello world</b>"] 

print 'Serving on 8088...' 
WSGIServer(('127.0.0.1', 8888), hello_world).serve_forever() 

내가 텍스트가 표시되기 전에 모든 요청은 5 초 지연을 얻을 것입니다 결과를 기대했다. 그러나 발생하는 모든 요청은 gevent.sleep() 호출로 대기열에 추가됩니다. gevent.sleep()은 두 번째 요청이 첫 번째 요청 직후에 시작된 경우 거의 10 초가 걸리게합니다.

serve_forever 함수가 모든 요청에 ​​대해 새 녹색 글을 생성하지 않습니까?

답변

6

요청을하기 위해 무엇을 사용하고 있습니까? 나는 그 문제가 거기에 있다고 생각한다.

나는 AB (아파치 벤치 마크)와 코드를 테스트하고이 (편집 출력) 도착 :

$ ab -c 200 -n 200 http://localhost:8888/ 

Completed 100 requests 
Completed 200 requests 
Finished 200 requests 

Concurrency Level:  200 
Time taken for tests: 5.048 seconds 
Requests per second: 39.62 [#/sec] (mean) 
Time per request:  5048.386 [ms] (mean) 

구간 명령은 gevent 서버 200 개 동시 요청을하게합니다. 5 초 후 모든 요청이 완료되었습니다. 요청이 대기중인 경우이 기준은 1000 초가 걸립니다.

여러분의 시스템이 제대로 greenlets을 지원하지 않을 수도 있지만 테스트 할 때 사용하는 방법이 각 요청에서 차단되는 것 같습니다. 나는. 서버가 동시성을 지원하지만 클라이언트는 그렇지 않습니다.

0

브라우저는 동일한 도메인에 요청을 대기시키는 것으로 알려져 있습니다.

다른 브라우저 (예 : FF 및 Chrome과 같이 브라우저 창은 다르지 않음)를 열어 다른 연결을 시도해보십시오.

관련 문제