Je vais avoir un Python exécuté 24/7 dans une boucle while, voici un exemple du genre de programme:
while True:
print ("me again...")
Mais quand je l'exécute, mon processeur passe à 100%! Mais je ne veux pas cela car mon programme fonctionnera pendant de longues périodes, etc. et je ne veux pas que mon processeur devienne très chaud, est-ce que je peux empêcher cela?
Réponses:
À la fin de votre boucle, ayez un
time.sleep(xx)
pour les secondes, outime.sleep(x.x)
pour représenter des secondes partielles(S'il vous plaît rappelez-vous d'importer le temps bibliothèque, comme suit:
import time
)Avec xx étant aussi élevé que possible sans nuire à votre programme. En ce moment, votre programme fait toujours tout aussi vite qu'il le peut, plutôt que de donner du temps au Pi pour se reposer ou faire autre chose.
la source
import time
?Préface
Assurez-vous que vous devez vraiment exécuter votre tâche à plusieurs reprises. Ceci est appelé attente occupée et presque toujours sous-optimal. Si votre tâche vérifie la sortie d'un sous-processus, vous pouvez simplement la
subprocess.wait()
terminer, par exemple. Si votre tâche consiste à attendre qu'un fichier ou un répertoire du système de fichiers soit touché, vous pouvez utiliser pyinotify pour obtenir votre code déclenché à partir de l'événement du système de fichiers géré par le noyau.Répondre
C'est ainsi que vous écrivez une boucle infinie pour une attente occupée sans consommer trop de CPU.
Python 2:
Python 3:
Évaluation
Comme @gnibbler l'a testé dans une autre réponse , le code présenté ne devrait pas consommer plus de 1% de CPU sur les machines récentes. S'il consomme toujours trop de CPU avec votre code de charge utile, pensez à augmenter encore le temps de sommeil. D'un autre côté, le code de charge utile devra peut-être être optimisé pour une exécution répétée. Par exemple, la mise en cache peut accélérer l'exécution sur des données inchangées.
Crédits
Cette réponse tente de s'appuyer sur la réponse de @ user2301728 .
la source
J'ai eu le même problème, voir ma question sur Stack Exchange . La solution était une combinaison de
time.sleep(0.01)
etnice
.nice
réduit le processeur disponible pour une application. Voici comment je commence l'application:nice -n 19
.la source
Vous pouvez également essayer
nice -n 19 python myscript.py
.nice est un utilitaire * nix pour définir la priorité CPU d'une tâche. 19 est le poids le plus important et par conséquent le réglage le plus lent.
la source