Hallo,
ich habe nach folgendem Tutorial einen WebSocketServer aufgesetzt, welcher über die RS232 Schnittstelle kommunizieren kann.
Raspberry Pi + Arduino + Tornado
Die Funktion ist soweit auch funktionell. Was mich aber stört ist, das der Pi nach starten des Scripts eine CPU-Auslastung von fast 100% erreicht. Die ist folgendem Stück Quelltext geschuldet, welcher für die RS232 Kommunikation zuständig ist.
[code=php]import serial
import time
import multiprocessing
class SerialProcess(multiprocessing.Process):
def __init__(self, taskQ, resultQ):
multiprocessing.Process.__init__(self)
self.taskQ = taskQ
self.resultQ = resultQ
self.usbPort = '/dev/ttyACM0'
self.sp = serial.Serial(self.usbPort, 115200, timeout=1)
def close(self):
self.sp.close()
def sendData(self, data):
print "sendData start..."
self.sp.write(data)
time.sleep(3)
print "sendData done: " + data
def run(self):
self.sp.flushInput()
while True:
# look for incoming tornado request
if not self.taskQ.empty():
task = self.taskQ.get()
# send it to the arduino
self.sp.write(task + "\n");
print "arduino received from tornado: " + task
# look for incoming serial data
if (self.sp.inWaiting() > 0):
result = self.sp.readline().replace("\n", "")
# send it back to tornado
self.resultQ.put(result)[/php]
Die "while True:" Schleife sorgt für die hohe Auslastung. Leider fehlt mir das Wissen, den Quelltext so um zu schreiben, das es Prozessorfreundlicher ist. Ich dachte daran, die Schleife gegen events zu tauschen (wenn es sowas hier geben sollte).
Könnte mir bitte jemand helfen, diesen Quellcode Prozessorfreundlich um zu schreiben?
Danke
mfg Hans