Problem mit Threads
Verfasst: Montag 1. September 2008, 12:39
Hi,
wie der Titel schon sagt habe ich ein kleines Problem beim benutzen von Threads. Ich habe eine Klasse erstellt die in einem eigenen Thread laufen soll. Eigentlich habe ich versucht die Klasse nachzubauen von meinem TCP-Server. Ziel des ganzen ist ein Bluetooth RFCOMM- Server. Mit ein wenig Suche im Netz habe ich erst mal eine funktionierende Verbindung hergestellt. Ich poste einfach mal meinen ersten Versuch:
Wie gesagt, wenn ich den Server so starte bekomme ich erst einmal eine funktionierende Verbindung hin. Binde ich den Server aber in mein Programm ein so blockiert der Server mein Hauptprogramm ab dem Aufruf der Methode 'run'. Das wäre ja auch logisch wenn ich den Server im gleichen Thread laufen lassen würde. Allerdings dachte ich das meine Klasse ein eigener Tread wird.
Vermutlich sehe ich mal wieder den Wald vor lauter Bäumen nicht oder aber ich habe hier irgendwas Grundätzliches bei dem erstellen der Klassen falsch verstanden. Vielleicht kann mir jemand mal auf die Sprünge helfen?
wie der Titel schon sagt habe ich ein kleines Problem beim benutzen von Threads. Ich habe eine Klasse erstellt die in einem eigenen Thread laufen soll. Eigentlich habe ich versucht die Klasse nachzubauen von meinem TCP-Server. Ziel des ganzen ist ein Bluetooth RFCOMM- Server. Mit ein wenig Suche im Netz habe ich erst mal eine funktionierende Verbindung hergestellt. Ich poste einfach mal meinen ersten Versuch:
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
import bluetooth
import threading
import Queue
class MyBTServer(threading.Thread):
def __init__(self, notify_window, QueueIn, QueueOut):
threading.Thread.__init__(self)
#Warteschlangen für den Server
self.QueueIn = QueueIn
self.QueueOut = QueueOut
#vorerst standardport - Port wird später vor Aufruf von run gesetzt
self.Port = 15
#bei schliessen des Main-Threads auch Server beenden
self.setDaemon(True)
self.CreateServer()
self.run()
def CreateServer(self):
"""
BT-Server auf PORT starten
"""
self.server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
self.server_sock.bind(("",self.Port))
self.server_sock.listen(1)
print "Server erstellt auf Port", self.Port
def run(self):
"""
Verbindungen Annehmen und an Handler weitergeben
"""
while True:
self.client_sock, self.client_info = self.server_sock.accept()
print "Verbindung mit", self.client_info
self.handle()
def handle(self):
StreamOffen = True
while StreamOffen:
data = self.client_sock.recv(1024)
if data == "":
StreamOffen = False
print data
print"Verbindung mit ", self.client_info, "beendet"
self.client_sock.close()
q1 = Queue.Queue()
q2 = Queue.Queue()
server = MyBTServer(None, q1, q2)
Vermutlich sehe ich mal wieder den Wald vor lauter Bäumen nicht oder aber ich habe hier irgendwas Grundätzliches bei dem erstellen der Klassen falsch verstanden. Vielleicht kann mir jemand mal auf die Sprünge helfen?