在pyzmq中,如何停止代理?

时间:2017-03-29 23:38:27

标签: python proxy zeromq pyzmq

我在防火墙后面有一台服务器,还有一个可从服务器请求信息的公共Web服务器。我使用pyzmq来管理后端和Web前端之间的通信。当他们在本地进行通信时,这项工作没有代理。它在使用代理时有效。我可以启动ThreadProxy,但是如何阻止它呢?

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()的上下文。

我想在linux守护进程中运行它,所以“kill”不是最优雅的解决方案,它也不能让我控制我正在寻找的代理。

1 个答案:

答案 0 :(得分:1)

答案是代理自行关闭。

我认为我的问题是理解问题。代理正在作为守护进程启动(默认),我不知道这对Python意味着什么。当所有非守护程序线程完成时,程序结束。在这种情况下,这意味着代理在程序的其余部分停止时停止。我不需要明确地阻止它。

在构建Linux服务时,这正是我想要的功能。在主线程中,我将启动代理,执行某些操作(如监视代理)或什么都没有,当我想要停止服务时,主线程将结束,关闭并且代理将死在它上面#39 ;拥有。