2017-03-29 22 views
0

나는 방화벽 뒤에있는 서버와 공개적으로 사용 가능한 웹 서버가 서버로부터 정보를 요청하고있다. 나는 pyzmq를 사용하여 백엔드와 웹 프론트 엔드 간의 통신을 관리하고 있습니다. 프록시가 없어도 로컬로 통신 할 때 작동합니다. 그것은 프록시를 사용할 때 작동합니다. ThreadProxy를 시작할 수는 있지만 어떻게 멈출 수 있습니까?pyzmq에서 어떻게 프록시를 중지합니까?

import zmq 
from zmq.devices import ThreadProxy 

class MyProxy: 
    def __init__(self) 
     p = ThreadProxy(zmq.ROUTER, zmq.DEALER) # Not using mon 
     p.setsockopt_in(zmq.IDENTITY, b'ROUTER') 
     p.setsockopt_out(zmq.IDENTITY, b'DEALER') 
     p.bind_in('tcp://*:5550') 
     p.connect_out('tcp://localhost:5550') 
     self._proxy = p 
    def start(self) 
     self._proxy.start() 
    def stop(self) 
     ??? 

실제로 프록시를 중지하도록 요청하려면 어떻게해야합니까? .join은 프록시가 차단되었거나 중지 할 이유가 없기 때문에 대기합니다. .term()에 대한 컨텍스트가 없습니다.

"kill"은 가장 우아한 해결책이 아니며 내가 찾고있는 프록시에 대한 제어권을 제공하지도 않습니다.

답변

1

대답은 프록시가 종료된다는 것입니다.

내 문제는 이해 중 하나라고 생각합니다. 프록시는 데몬 (기본값)으로 시작되고 파이썬에 어떤 의미인지 몰랐습니다. 모든 데몬이 아닌 스레드가 완료되면 프로그램이 종료됩니다. 이 컨텍스트에서 의미하는 것은 나머지 프로그램이 중지 될 때 프록시가 중지된다는 것입니다. 나는 그것을 명시 적으로 멈출 필요가 없다.

저는 리눅스 서비스를 구축하고 있기 때문에 원하는 기능입니다. 메인 스레드에서 프록시를 시작하거나 (프록시를 모니터하는 것과 같은) 무언가를하고, 서비스를 중지하려면 메인 스레드를 마무리하고 프록시를 종료합니다. 프록시 가정

+0

는 컨텍스트가 닫힐 때 그것이 다이 일반 장치와 동일한 동작. 'myProxy.context_factory(). term()'과 같은 일을하면 수동으로 프록시가 멈추지 만 가베지 콜렉션을 사용하면 잘 작동한다. – FirefoxMetzger