Einfacher Thread

27/05/2008 - 23:55 von Martin Gysel | Report spam
Hallo

Ich will mit einem eifache Thread die serielle Schnittstelle polle. Dies
klappt soweit auch, jedoch benötigt mein Program, sobald ich den Thread
starte fast 100% der CPU Resourcen (resp. 50% bei HyperThreading CPU).
Der Code sieht folgendermasen aus:

def startReading(self):
""" create new thread """
self.__serialThread = threading.Thread(target=self.__comPortThread)
self.__alive.set()
self.__serialThread.setDaemon(1)
self.__serialThread.start()

def __comPortThread(self):
"""Thread that handles the incoming traffic"""
while self.__alive.isSet():
"""read first"""
try:
"""read one character"""
text = self.__serial.read(1)
except:
pass # not the best solution...
else:
if text:
"""read as much as in the queue"""

text = text + self.__serial.read(self.__serial.inWaiting())
"""send it to main app"""
self.sendToTop(text)

Mache ich da etwas komplett falsch?
Danke im Voraus.

Grüsse
Martin
 

Lesen sie die antworten

#1 Volker Grabsch
28/05/2008 - 01:03 | Warnen spam
Martin Gysel schrieb:
Ich will mit einem eifache Thread die serielle Schnittstelle polle.


^^^^^
Grundsàtzlich: Bei Verwendung von asynchronen I/O-Operationen
(auch "non-blocking" genannt) kann man sich sowohl Polling als
auch Threading ersparen.

def __comPortThread(self):
"""Thread that handles the incoming traffic"""
while self.__alive.isSet():
try:
"""read one character"""
text = self.__serial.read(1)




Wenn ich das richtig sehe, soll diese Codestelle warten, bis
wirklich ein Zeichen vorhanden ist.

Das sollte sie auch.

Aber falls sie das nicht tut, wàre ein zusàtzlicher Warte-
befehl ganz nett. In jede Endlosschleife gehört ein Wartebefehl,
oder zumindest ein wartender IO-Befehl.

except:
pass # not the best solution...



Vielleicht fliegt bei dir ja stàndig eine Exception, was du
nicht merkst, da sie ja komplett unterdrückst. BTW, wozu soll
das eigentlich gut sein? Wieso làsst du die Exception nicht
einfach bis ins Hauptprogramm durchschlagen? Dann siehst du
/sofort/, wenn was schief làuft.


Gruß,

Volker

"Wenn du der Meinung bist, der andere sei ein Depp, dann überlass das
Antworten denjenigen, die nicht dieser Meinung sind."

Ähnliche fragen