On 2013-12-16, MRAB <pyt...@mrabarnett.plus.com> wrote: > On 16/12/2013 14:31, sem...@gmail.com wrote: > >> i wrote a program to watch a serial port and look for a command. then >> send a tcp packet. all works great but it takes my processor load to >> about %25. not sure if there is a way to make this more efficient. >> >> import serial >>
[...] >> ser = serial.Serial( >> port='COM10',\ >> baudrate=9600,\ >> parity=serial.PARITY_NONE,\ >> stopbits=serial.STOPBITS_ONE,\ >> bytesize=serial.EIGHTBITS,\ >> timeout=0) >> >> print("connected to: " + ser.portstr) >> >> #this will store the line >> line = [] >> c = 0 The line above is useless -- it binds 'c' to the integer value 0, but then you rebind 'c' to something else without ever referencing that value. >> while True: >> for c in ser.readline(): >> line.append(c) >> >> if c == '1': >> >> s.send('CG 1-21 ADD 1 reserveisoff 1 \r\n') >> data = s.recv(1024) >> print 'Received', repr(data) >> >> print("one") >> line = [] >> break >> >> if c == '2': >> >> s.send('PLAY 1-1 AMB.mp4 \r\n') >> data = s.recv(1024) >> print 'Received', repr(data) >> s.send('LOADBG 1-1 EMPTY MIX 30 AUTO \r\n') >> data = s.recv(1024) >> print 'Received', repr(data) >> print("two") >> line = [] >> >> break >> >> s.close() >> ser.close() > I think the problem might be that you've set the timeout to 0, so it > doesn't block if there's no data available. That is indeed the problem. When there's no serial data you're spinning around in that loop as fast as your CPU can go. Try setting "timeout = None" when you set up the serial port. That way the call to ser.readline() will block (IOW won't return) until there's actually data to be processed. While blocked waiting for serial data, your program won't be using up any CPU time. Your for loop with breaks looks odd2. Can you explain what it's suposed to be doing? You seem to be using the for loop to iterate through the characters in each input line, but then breaking out of the loop the first time you see either a '1' or '2' in each line. Is that what you intended? -- Grant Edwards grant.b.edwards Yow! Quick, sing me the at BUDAPEST NATIONAL ANTHEM!! gmail.com -- https://mail.python.org/mailman/listinfo/python-list