Question

J'ai créé un script pour surveiller la sortie d'un port série qui reçoit 3-4 lignes de données toutes les demi-heures - le script fonctionne très bien et attrape tout ce qui se détache du port qui, à la fin de la journée est ce que questions ...

Que me dérange, cependant, est que l'utilisation cpu semble assez élevé pour un programme qui est suivi un seul port série, 1 coeur sera toujours à l'utilisation de 100%, alors que ce script est en cours d'exécution.

Je suis fondamentalement utilise une version modifiée du code dans cette question: pyserial - Comment lire Dernière ligne envoyés depuis le terminal série

J'ai essayé fonction vote le inWaiting () à intervalles réguliers et l'avoir sommeil quand inWaiting () est 0 - Je l'ai essayé des intervalles de 1 seconde jusqu'à 0,001 seconde (essentiellement, aussi souvent que possible sans augmenter l'utilisation cpu) -. ce réussira à saisir la première ligne, mais semble manquer le reste des données

Réglage du délai d'attente du port série ne semble pas avoir d'effet sur l'utilisation du cpu, ni ne mettre la fonction d'écoute dans son propre fil (pas que je me attendais vraiment une différence, mais ça valait la peine d'essayer).

  • Doit python / pyserial utilisera autant cpu? (Cela semble exagéré)
  • Suis-je perdre mon temps sur cette quête / Devrais-je mordre la balle et planifier le script de dormir pendant les périodes que je connais aucune donnée ne sera à venir?
Était-ce utile?

La solution

Peut-être que vous pourriez émettre un appel read(1) bloquant, et quand il réussit utiliser read(inWaiting()) pour obtenir le bon nombre d'octets restants.

Autres conseils

serait une solution de style meilleur système? Créer le script python et l'ont exécuté par la tâche Cron / planifiée?

pyserial ne devrait pas utiliser beaucoup CPU mais si son assis juste là polling pendant une heure, je peux voir comment il peut arriver. Sommeil peut être une meilleure option en conjonction avec réveil périodique et les sondages.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top