短い質問以下の例を使用して、の実際のインスタンスを 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()