He creado una secuencia de comandos para supervisar la salida de un puerto serie que recibe 3-4 líneas de datos cada media hora: la secuencia de comandos funciona bien y toma todo lo que sale del puerto que en el el final del día es lo que importa ...Python/PySerial y uso de CPU
Lo que me molesta, sin embargo, es que el uso de la CPU parece bastante alto para un programa que solo está monitoreando un solo puerto serial, 1 núcleo siempre estará al 100% de uso mientras script se está ejecutando.
Soy básicamente que ejecuta una versión modificada del código en esta pregunta: pyserial - How to Read Last Line Sent from Serial Device
la función inWaiting() a intervalos regulares He tratado de votación y tener que dormir cuando inWaiting() es 0 - I' He intentado intervalos de 1 segundo a 0.001 segundos (básicamente, siempre que puedo sin aumentar el uso de la CPU): esto logrará tomar la primera línea, pero parece que omite el resto de los datos.
Ajustar el tiempo de espera del puerto serie no parece tener ningún efecto en el uso de la CPU, ni colocar la función de escucha en su propio hilo (no es que realmente esperara una diferencia, pero valía la pena intentarlo).
- ¿Debería python/pyserial usar esta cantidad de CPU? (Esto parece exagerado)
- ¿Estoy perdiendo el tiempo en esta misión/Debería solo morder la viñeta y programar el guión para dormir durante los períodos que sé que no se recibirán datos?
¡Impresionante! Está ronroneando como un gatito ahora, al lado del uso nulo de la CPU y atrapa todo lo que le echo. He estado usando read (inWaiting()) bajo la impresión de que funcionaría del mismo modo que read (1): obviamente este no es el caso. Gracias por aclarar eso para mí. –
Genial, y gracias por hacerme descubrir pyserial, lo consideraré la próxima vez que juegue con puertos seriales :) – tonfa
Es excelente, fácil de configurar y usar, esto fue lo único con lo que tuve problemas y ** I ** fue el problema –