Cours
Dans ce tutoriel, vous découvrirez la fonction Python sleep()
qui permet d'introduire un délai dans l'exécution de votre programme. Il s'agit d'une fonction pratique, en particulier lorsque votre programme fonctionne avec des threads ou même lorsque vous travaillez avec des graphiques et des animations. La fonction " sleep" est disponible dans le module time
qui contient de nombreuses autres fonctions relatives à l'accès au temps et aux conversions. Et bien que ce module soit disponible sur toutes les plateformes, toutes les fonctions qu'il contient ne sont pas forcément disponibles ou ne fonctionnent pas exactement de la même manière. Examinons le module time.sleep()
plus en détail...
Module temps
Ce module fournit des fonctions qui permettent de manipuler le temps et de l'utiliser dans votre programme. Il existe d'autres modules "cousins" qui permettent de travailler plus précisément avec la date et le calendrier au sein de votre système, mais ce module est davantage axé sur la manipulation du temps - en travaillant avec les heures jusqu'aux millisecondes.
Parmi les termes que vous entendrez généralement lorsque vous travaillerez avec le temps dans le monde de l'informatique, il y a celui d'époque.
Mais d'abord, assurez-vous d'importer le module de temps. Pour ce faire, il suffit de taper :
import time
époque
C'est à ce moment précis que le temps a réellement commencé. Cela ne signifie pas que notre système solaire est né ou que l'homme a commencé à mesurer le temps, mais c'est relativement proche de maintenant. Pour le système UNIX, l'époque est le 1er janvier 1970, 00:00:00 (UTC) (c'était un jeudi au cas où vous vous poseriez la question...). Pour connaître l'époque de votre système, vous pouvez taper :
time.gmtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
Vous obtiendrez ainsi l'année (tm_year), le mois (tm_mon), le jour (tm_mday), l'heure (tm_hour), la minute (tm_min) et la seconde (tm_sec). Avec la semaine du jour (tm_wday) - c'est 3 puisque le lundi est marqué comme le début de la semaine et est compté comme 0. Il est suivi du jour de l'année (tm_yday) ou jour julien. Enfin, l'indicateur d'heure d'été (tm_isdst) - DST signifie "daylight saving time" (heure d'été). Ce champ a une valeur de 0, -1 ou 1. 0, si l'heure d'été n'est pas en vigueur. 1, si l'heure d'été est en vigueur et enfin -1, si l'information n'est pas disponible. Pourquoi ne pas être disponible, demandez-vous ? Parce que les règles relatives à l'heure d'été sont déterminées par la législation locale et peuvent être modifiées.
La plupart des ordinateurs enregistrent l'heure et la date sous la forme d'une différence de secondes entre la date du 1er janvier 1970, 00:00:00 (UTC) et l'heure à enregistrer. Donc, si vous allez de l'avant et tapez :
time.time()
1548611182.872067
Vous obtiendrez ainsi le nombre de secondes écoulées depuis le 1er janvier 1970, 00:00:00 (UTC). Cette différence est ce que nous appelons l'horodatage ou le temps d'époque UNIX, et elle se présente sous la forme d'un nombre à virgule flottante. Pour être honnête, la différence n'est pas en termes de secondes mais de ticks. Dans la plupart des systèmes UNIX, l'horloge fait "tic-tac" 50 à 100 fois par seconde. Ainsi, le temps d'époque UNIX est en fait le nombre de ticks qui se sont produits depuis le 1er janvier 1970, 00:00:00 UTC.
Maintenant que vous avez une idée de ce que fait le module de temps. Examinons la fonction sleep()
.
time.sleep()
En d'autres termes, le site time.sleep()
prend comme argument le nombre de secondes pendant lesquelles vous souhaitez que le programme s'arrête ou soit suspendu avant de passer à l'étape suivante. Voyons cela à l'aide d'un programme simple, dans lequel nous affichons simplement l'heure actuelle avec un arrêt de 5 secondes entre l'exécution suivante - introduisant ainsi une différence de 5 secondes entre chaque impression de l'heure actuelle. L'utilisation de time.ctime()
permet de voir l'heure locale dans un format agréable.
for count in range(5):
print(time.ctime())
# Prints the current time with a five second difference
time.sleep(5)
Sun Jan 27 18:46:24 2019
Sun Jan 27 18:46:29 2019
Sun Jan 27 18:46:34 2019
Sun Jan 27 18:46:39 2019
Sun Jan 27 18:46:44 2019
La syntaxe de la fonction est la suivante : time.sleep(sec)
où sec est l'argument qui spécifie le nombre de secondes pendant lesquelles le programme doit être suspendu. La fonction ne renvoie aucune valeur.
sec - L'argument est en fait un nombre à virgule flottante, ce qui vous permet de rendre le temps de sommeil plus précis. Cependant, cela est un peu douteux car la durée réelle de la suspension peut être inférieure à la durée demandée ou arbitrairement plus longue. Pour mieux comprendre pourquoi, imaginez que le programme soit un problème ou une tâche gérée par un autre vendeur dans un magasin - lorsque vous suspendez le programme, la personne qui y travaille se voit immédiatement attribuer un autre client. Mais peu de temps après (avant les secondes de sommeil spécifiées), un autre vendeur libre reprend la tâche et l'achève - le temps de suspension peut donc être inférieur. De même, le temps de suspension peut être plus long que demandé d'une durée arbitraire en raison de la programmation des tâches pour tous les vendeurs du magasin, et le programme doit donc attendre son tour. En interne, c'est bien sûr plus complexe, et de nombreuses façons de gérer cela ont déjà été introduites.
for count in range(3):
print(time.ctime())
# Prints the current time with a five second difference
time.sleep(2.5)
Sun Jan 27 18:46:49 2019
Sun Jan 27 18:46:52 2019
Sun Jan 27 18:46:54 2019
Python ne donne aucune garantie sur le comportement de ces appels de fonction, en particulier entre plates-formes. La raison sous-jacente est que la plupart des fonctions définies dans ce module appellent des fonctions de la bibliothèque de la plate-forme C portant le même nom. La précision dépend vraiment de la précision du sommeil du système d'exploitation sous-jacent et si vous devez aller plus loin, il vous sera utile de consulter la documentation de la plate-forme car la sémantique de ces fonctions varie d'une plate-forme à l'autre.
Cependant, il y a de bonnes nouvelles : à partir de la version 3.5 de Python, le site time.sleep(secs)
dort maintenant au moins secs(argument passé) même si le sommeil est interrompu par un signal (encore une fois, imaginez que le signal soit un vendeur comme discuté ci-dessus), sauf si le gestionnaire du signal lève une exception.
Que se passe-t-il donc en interne lorsque vous utilisez time.sleep()
?
Cette partie est destinée à mieux comprendre la fonction, mais n'est pas nécessaire pour commencer à utiliser la fonction elle-même. La fonction utilise en fait l'horloge système, un dispositif électronique dans un ordinateur qui émet un signal régulier à haute fréquence qui synchronise tous les composants internes et fait partie du processeur. Ce module déclenche ce que l'on appelle des demandes d'interruption (IRQ) à des intervalles programmables. Les IRQ sont chargées d'interrompre le code en cours d'exécution du processeur, de sauvegarder l'état actuel avant de passer le contrôle à un autre morceau de code dans le système d'exploitation.
La fonction sleep() appelle donc une routine d'achèvement d'E/S sous-jacente ou un appel de procédure asynchrone pour bloquer le processus. Le système d'exploitation notera que vous ne voulez rien faire d'autre jusqu'à ce qu'un délai d'attente soit atteint. Ainsi, une fois ce délai atteint, le système d'exploitation reprend votre processus à partir du dernier état dont il se souvient. De votre point de vue, un simple appel à la fonction time.sleep()
a été effectué.
Félicitations pour avoir maîtrisé la fonction time.sleep()
. N'oubliez pas de consulter le cours Python Data Science Toolbox (Part 1) de DataCamp pour en savoir plus sur les fonctions en Python.