2013-10-06 4 views
1

zero 루프 서버를 같은 루프의 다른 지브롤릿과 함께 그린렛으로 실행하고 싶습니다. ZeroRPC의 설명서는 약간 밝습니다. 이것은 zeroRPC 서버를 시작하는 제안 된 방법입니다zerorpc을 greenlet으로 실행하는 방법은 무엇입니까?

s = zerorpc.Server(Cooler()) 
s.bind("tcp://0.0.0.0:4242") 
s.run() 

는 greenlet로 서버를 실행하기를, 나는 greenlet에서 실행 포장했습니다

s = zerorpc.Server(Cooler()) 
s.bind("tcp://0.0.0.0:4242") 
gevent.spawn(s.run) 

# More code and greenlets started. 
# ... 

을하지만 어색 조금 보인다 zeroRPC는 이미 gevent를 기반으로하고 있으며 gevent 프레임 워크의 다른 서버는 비 차단 시작 메소드를 가지고 있다고 가정합니다.

더 좋은 방법이 있나요?

답변

0

이렇게하는 것이 가장 좋은 방법입니다.

.run() 메서드는 (zerorpc) 서버를 설정하고 필요에 따라 하위 greenlets을 생성 및 관리합니다. 이렇게하면 greenlet 트리가 효과적으로 생성되어 치명적인 오류를 .run() 메서드로 버블 링합니다. zerorpc 서버는 .run() 메소드가 소유 한 greenlet 트리에서 생성 된 새로운 greenlet에서 들어오는 요청을 실행합니다.

차단 .run() 메서드를 사용하면 .run()이 발생시키는 오류를 간단한 try/catch로 처리 할 수 ​​있습니다. 또한 .run()이 반환되면 zerorpc 서버가 완전히 중지되었음을 의미합니다. 예를 들어 다른 greenlet에서 .stop()을 호출하면 zerorpc 서버는 .run()에서 돌아 오기 전에 새 요청의 수락을 중지하고 활성 요청 처리를 완료합니다.