Ich erstelle ein kleines Programm, welches
* auf eine Schnittstelle lauscht und ankommende Daten an eine Queue übergibt (IRTrans)
* eine TCP/IP Server startet und ebenfalls auf ankommende Befehle lauscht und an die Queue übergibt
* ein Programmteil, welcher die Daten in der Queue verarbeitet
Da ich noch ziemlich Anfänger bin wäre es toll, wenn ein Python-Profi kurz über den Programmcode schauen könnte ob dieser Code-Teil so Sinn macht oder was besser gemacht werden sollte.
Des weiteren habe ich nicht rausgefunden, wie im im Teil SingleTCPHandler .. def handle() die Queue füllen kann.
Wenn mir hier auch jemand einen Tipp geben könnte.
Vielen dank
Code: Alles auswählen
class Trigger(threading.Thread):
# Dieser Teil reagiert auf die Daten in der Queue (events) und arbeitet
# diese ab
def __init__(self, events): # neuer Konstruktor
threading.Thread.__init__(self) # Aufruf des ererbten Konstruktors
self.events = events
def run(self):
while True:
a = self.events.get()
print "Wert in Queue: ", a
if a == "irtrans.vcr0081.4":
test()
self.events.task_done()
##########################################################################
# TCP/IP-Server
##########################################################################
class SingleTCPHandler(SocketServer.BaseRequestHandler):
"One instance per connection. Override handle(self) to customize action."
def handle(self):
# self.request is the client connection
data = self.request.recv(1024) # clip input at 1Kb
cmd = data.strip()
print cmd
reply = "Antwort an Server; noch zu programmieren"
#Trigger.events.put("Neuer Wert in Queue")
if reply is not None:
print "Rückgabewert: ", reply
self.request.send(reply + '\n')
self.request.close()
class SimpleServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
print "SimpleServer aufgerufen"
# Ctrl-C will cleanly kill all spawned threads
daemon_threads = True
# much faster rebinding
allow_reuse_address = True
def __init__(self, server_address, RequestHandlerClass):
SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass)
class Start_TCPServer(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
server = SimpleServer((HOST, TCP_PORT), SingleTCPHandler)
try:
print "TCP/IP-Server gestartet, warte auf Verbindungen"
server.serve_forever()
except:
server.shutdown()
print "TCP/IP-Server heruntergefahren"
#########################################################################
# AUFRUFE / START
#########################################################################
# Trigger für Verarbeitung der queue
print "... starte event-trigger"
trigger = Trigger(events)
trigger.start()
# auf IRTrans-Befehle lauschen
print "... lausche auf IRTRans Server"
irreceive = hc_irtrans.Irtrans_listen(events)
irreceive.start()
# TCP/IP Server starten
tcpserver = Start_TCPServer()
tcpserver.start()