2016-03-28 2 views
0

Ich habe die folgenden zwei Python-Klassen kommunizieren:Wie aus den Request-Handler auf einen Socket Server

import socketserver 

class MyServer(socketserver.ThreadingMixIn, socketserver.TCPServer): 
    def __init__(self, server_address): 
     socketserver.TCPServer.__init__(self, server_address, MyTcpHandler) 
     self.allow_reuse_address = True 
     self.serve_forever() 

class MyTcpHandler(socketserver.BaseRequestHandler): 
    data = "" 

    def handle(self): 
     self.data = self.request.recv(BUFF_SIZE).strip() 
     if self.data == b"shutdown": 
      self.request.close() 
      import threading 
      threading.Thread(target=SERVER.shutdown).start() 

Wenn also der Client sendet "shutdown", der Server selbst Abschaltung sollte. Als Workaround setze ich die globale Variable SERVER auf das Objekt MyServer, dann rufe ich SERVER.shutdown in einem anderen Thread auf, wie oben gezeigt.

Aber die Verwendung einer globalen Variablen ist hässlich. Wie kann ich also direkt vom Request-Handler mit dem Socket-Server kommunizieren?

Antwort

Verwandte Themen