5

短い質問以下の例を使用して、の実際のインスタンスを BaseRequestHandler クラスと
共有する Pythonic の方法はありますか?my_object

背景
定義により、BaseRequestHandler クラスは要求ごとに新しいインスタンスを作成します。handle()このため、関数からProtocolInterfaceインスタンスにデータを戻す方法の解決策を見つけるのに苦労しています。handle()stdout への出力以外で 何かを行う必要がある場合、これは間違ったアプローチである可能性があることに注意してください。

現時点では、グローバル変数my_objectが渡され、頻繁に変更されることが予想されるため、グローバル変数が機能するとは考えていません (これが、handle()それを見る必要がある理由です。クライアントの例 (偽のデータを送信する) を見るには、私の他の SO の質問を参照してください。私が直面している最大の問題は、ソケットサーバーがバックグラウンド スレッドで実行されていることだと思います。

やりたいことの例

class ProtocolHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        while(1):
            self.data = self.request.recv(1024)
            if self.data == '':
                break
            self.request.send("Success") 
            self.my_object.success = True#  <--- How can I share my_object's instance?

class ProtocolInterface():
    def __init__(self, obj, host='127.0.0.1', port=8000, single_connection=False):
        self.my_object = obj # <--- This ideally is the same instance seen in ProtocolHandler
        self.host = host
        self.port = port

        # Create the socket server to process in coming traffic
        if(single_connection):
            self.server = SocketServer.TCPServer((self.host, self.port), ProtocolHandler)
        else:
            self.server = SocketServer.ThreadingTCPServer((self.host, self.port), ProtocolHandler)

    def start(self):
        print "Server Starting on HOST: " + self.host
        server_thread = threading.Thread(target=self.server.serve_forever)
        server_thread.daemon = True
        server_thread.start()
4

1 に答える 1