Pregunta

He creado un script para controlar la salida de un puerto serie que recibe 3-4 líneas de datos cada media hora - la secuencia de comandos se ejecuta bien y agarra todo lo que sale del puerto, que al final del día es lo asuntos ...

Lo que me molesta, sin embargo, es que el uso de la CPU parece bastante alta para un programa que acaba de vigilancia de un solo puerto serie, 1 conductor siempre será al 100% de uso, mientras que este script se está ejecutando.

Estoy básicamente que ejecuta una versión modificada del código en esta pregunta: PySerial - Cómo leer la última línea enviados desde el dispositivo de serie

He intentado la función de votación inWaiting () a intervalos regulares y tener que dormir cuando inWaiting () es 0 - He intentado intervalos desde 1 segundo a 0.001 segundos (básicamente, tan a menudo como pueda sin aumentar el uso de la CPU) -. este tendrá éxito en el acaparamiento de la primera línea, pero parece que se pierda el resto de los datos

Ajuste del tiempo de espera del puerto serie no parece tener ningún efecto sobre el uso de la CPU, ni poner la función de audición en su propio hilo (no es que realmente me esperaba una diferencia, pero valía la pena intentarlo).

  • En caso de Python / PySerial ser el uso de esta cantidad de CPU? (Esto parece un exceso)
  • ¿Estoy perdiendo mi tiempo en esta búsqueda / ¿Debo de tripas corazón y programar la secuencia de comandos para dormir para los períodos que yo sepa no hay datos vendrán?
¿Fue útil?

Solución

Tal vez usted podría emitir una llamada read(1) bloqueo, y cuando se logra utilizar read(inWaiting()) para obtener el número correcto de bytes restantes.

Otros consejos

¿Sería una solución estilo del sistema será mejor? Crear el script en Python y lo han ejecutado a través de tareas de Cron / Programado?

PySerial no deberían usar mucho CPU, pero si es sólo sentado allí de votación durante una hora puedo ver cómo puede suceder. Dormir puede ser una mejor opción junto con despertar y las encuestas periódicas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top