2017-03-29 23 views
0

私はファイアウォールの背後にあるサーバーと、公開されているWebサーバーから情報を要求しています。私は、バックエンドとWebフロントエンド間の通信を管理するために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()のコンテキストがありません。

私はこれをLinuxデーモン内で実行したいので、 "kill"は最も洗練された解決策ではありません。また、私が探しているプロキシを制御することもできません。

答えて

1

答えは、プロキシが閉じていることです。

私の問題は理解の一つだと思います。プロキシはデーモン(デフォルト)として起動されていますが、Pythonの意味を理解できませんでした。すべての非デーモンスレッドが終了すると、プログラムは終了します。このコンテキストでは、プログラムの残りの部分が停止するとプロキシが停止するということです。私はそれを明示的に停止する必要はありません。

私はLinuxサービスを構築していますが、これはまさに私が望む機能です。メインスレッドでは、私はプロキシを開始し、何か(プロキシの監視のような)を行うか、何もしないで、サービスを停止したいときは、メインスレッドは終了し、終了し、プロキシは自身の上で終了します。

+0

プロキシが通常のデバイスと同じように動作すると仮定すると、コンテキストが閉じたときにプロキシが終了します。 'myProxy.context_factory()。term()'のようなことをすると、最終的にプロキシが手動で停止されますが、ガベージコレクションではそれもうまく動作します。 – FirefoxMetzger