Есть ли способ для классов BaseRequestHandler иметь отслеживание состояния?

Краткий вопрос
Используя приведенные ниже примеры, существует ли способ Python для совместного использования фактического экземпляра my_object с классом BaseRequestHandler?

Предпосылки
По определению, класс BaseRequestHandler создает новый экземпляр для каждого запроса. Из-за этого я изо всех сил пытаюсь найти решение, как получить данные из функции handle () обратно в экземпляр ProtocolInterface . Обратите внимание, что это может быть неправильный подход, если мне нужно сделать что-то в handle () , кроме вывода на стандартный вывод.

На данный момент я не верю, что глобальные переменные будут работать, потому что 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()

5
задан Cœur 15 February 2019 в 08:43
поделиться