2013-08-16 2 views
2

에게 내가 아는 유일한 방법은 WSGI 모든 청주 인들이 스스로 끝날 때까지 기다리는 것입니다. 예를 들어 요청을 여전히 처리하고 있다면 제대로 마무리 할 수 ​​있습니다.gevent (평)는 정상적으로 종료 gevent의 WSGI 기반 서버는하기 (검색 및 gevent의 소스를 검사에서) 정상적으로 종료

문제는 위의 겉보기로는 올바른 코드로 서버는 실제로 최대를 기다립니다. 60 초이지만 SIGTERM을 수신하면 모든 TCP 연결이 즉시 종료됩니다. 그러나 Greenlets는 그들이 끝나거나 타임 아웃이 발생할 때까지 자신이했던 것을 계속합니다 (예를 들면, 잠자는 것).

아이디어가 있으십니까?

+0

당신이 그것을 할 방법을 찾았나요? –

답변

1

문서화 문자열은 서버의 정지 방법에 말했듯이 (gevent.baseserver.BaseServer : 정지)

Stop accepting the connections and close the listening socket. 

If the server uses a pool to spawn the requests, then :meth:`stop` also 
for all the handlers to exit. 
If there are still handlers executing after *has expired (default 1 second), 
then the currently running handlers in the pool are killed. 

내가 이것을 시도하지 않았지만 문서가 올바른지 경우이 같은 뭔가 우아한 정지를 얻을 수 있어야합니다 :

from gevent.pool import Pool 

pool_size = 8 
worker_pool = Pool(pool_size) 
gevent.wsgi.WSGIServer(('', 80), someWSGIApp, spawn=worker_pool) 
관련 문제