Comment faire pour exécuter le programme en Python pour toujours?
J'ai besoin d'exécuter mon programme Python pour toujours dans une boucle infinie..
Actuellement, je suis en cours d'exécution comme ça -
#!/usr/bin/python
import time
# some python code that I want
# to keep on running
# Is this the right way to run the python program forever?
# And do I even need this time.sleep call?
while True:
time.sleep(5)
Est-il une meilleure façon de le faire? Ou dois-je encore besoin de time.sleep
appel?
Toutes les pensées?
- Que serait la bonne façon de le faire. Vous n'avez pas besoin de la
time.sleep(5)
, aussi longtemps que vous avez un peu de code en retrait en dessous de lawhile True:
ligne (il peut juste êtrepass
au minimum) - Il est bon d'ajouter une condition d'arrêt -"arrêt du crochet", si vous voulez sortir, plutôt que de tuer le processus.
- Mais si vous n'avez pas le temps de dormir, ou faire quelque chose qui dort pour un événement externe (comme d'écoute pour les connexions de données ou sur un socket) alors votre programme utilise 100% du CPU, alias busywait. Ce n'est pas poli 🙂
- Python 3.5 pouvez utiliser asyncio et de lier des fonctions à des événements. Programme avec une interface graphique peut traiter avec ui-boucle d'événement ( par exemple gtk.main() )
- Cela semble être un double de cette question: stackoverflow.com/questions/3226628/non-blocking-wait-in-python
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez utiliser un
while True:
boucle qui ne brise jamais à exécuter du code Python en permanence.Toutefois, vous aurez besoin de mettre le code que vous voulez exécuter continuellement à l'intérieur de la boucle:
Aussi,
temps.le sommeil
est utilisé pour suspendre le fonctionnement d'un script pour une période de temps. Donc, puisque vous voulez le vôtre pour s'exécuter en permanence, je ne vois pas pourquoi vous l'utiliser.Comment à ce sujet?
Cela permettra à votre programme de sommeil jusqu'à ce qu'il reçoit un signal provenant d'un autre processus (ou lui-même, dans un autre thread), le laisser savoir qu'il est temps de faire quelque chose.
pour les systèmes d'exploitation qui prennent en charge
select
:sommeil est un bon moyen d'éviter la surcharge sur le cpu
ne sais pas si c'est très intelligent, mais j'ai l'habitude d'utiliser
sommeil méthode retourne toujours Aucun.
Voici la syntaxe complète,
J'ai un petit script interruptableloop.py qui exécute le code dans un intervalle de temps (par défaut 1s), il pompe un message à l'écran alors qu'il est en cours d'exécution, et les pièges d'un signal d'interruption que vous pouvez envoyer avec CTL-C:
Lorsque vous exécutez le script, puis de l'interrompre, vous voyez cette sortie, (les périodes de la pompe à chaque passage de la boucle):
interruptableLoop.py:
Tous le code ci-dessus va sûrement vous aider à exécuter votre code à l'infini, mais si vous voulez exécuter le code dans le fond avec nohup.
nohup
ne permet pas d'exécuter un programme indéfiniment.C'est l'un des seulement façons que je peux penser. Quant à savoir si c'est approprié, cela dépend du cas d'utilisation - les serveurs web et d'une boucle d'événement, parfois, de faire comme ceci. Et non, vous avez certainement n'avez pas besoin du moment.dormir appeler.