Connexion
Connexion

Comment utiliser time.sleep() en Python

Comment utiliser time.sleep() en Python
Hostman Team
Rédacteur technique
Programmation Python
14.10.2025
Reading time: 9 min

Il arrive qu’un programme doive faire une pause : attendre le chargement de données, laisser à l’utilisateur le temps de saisir une information ou réduire la charge du système. L’une des façons les plus simples d’y parvenir en Python consiste à utiliser la fonction time.sleep(), qui suspend l’exécution du programme pendant un intervalle donné.

Dans cet article, nous allons voir comment fonctionne time.sleep() en Python, ses particularités et ses alternatives, ainsi que les erreurs possibles.Nous expliquerons aussi quand l’utiliser dans les programmes multithread et asynchrones, et quand il vaut mieux préférer asyncio.sleep() ou d’autres mécanismes d’attente.

Qu’est-ce que la fonction sleep() en Python ?

La fonction sleep() a été ajoutée à la bibliothèque standard de Python afin de simplifier la création de pauses dans le code. Elle fait partie du module time et s’appelle via time.sleep(), ce qui permet d’interrompre temporairement l’exécution du programme pendant un certain nombre de secondes.

Dans la pratique, sleep() est utile pour insérer des pauses dans des environnements de test, entre des requêtes API ou entre l’envoi de messages. Cependant, elle ne doit pas être confondue avec les outils de synchronisation de threads ou les mécanismes de temporisation précise : pour cela, d’autres outils sont plus adaptés.

Comment fonctionne time.sleep()

La fonction time.sleep() met en pause le thread actuel pendant le nombre de secondes indiqué. Dans un programme multithread, les autres threads continuent de s’exécuter, tandis que celui où time.sleep() a été appelée reste « gelé » pendant cet intervalle.

Il est important de noter que time.sleep() bloque l’exécution du code à l’endroit où elle est appelée, retardant ainsi toutes les opérations suivantes. Une mauvaise utilisation peut donc entraîner une baisse de performance ou même figer l’interface utilisateur dans les applications de bureau.

Quand utiliser time.sleep()

La fonction time.sleep() est le plus souvent utilisée pour les tests ou le débogage, lorsqu’une courte pause est nécessaire — par exemple, pour vérifier la réponse d’une API ou attendre celle d’un serveur. Elle est également employée pour exécuter des scripts étape par étape, donnant à l’utilisateur le temps de lire ou de saisir des données.

Dans les démonstrations, tutoriels ou prototypes, time.sleep() sert à simuler des processus longs ; et dans les interactions avec des services externes, elle permet d’éviter des blocages dus à des requêtes trop fréquentes. Cependant, ce n’est pas le seul moyen de ralentir l’exécution du code — voyons maintenant quelques alternatives.

Utilisation de time.sleep() en Python

L’utilisation de time.sleep() en Python est simple, même pour les débutants. Néanmoins, certaines subtilités peuvent influencer les performances et la facilité de débogage.

Syntaxe de base

Pour utiliser time.sleep(), commencez par importer le module time :

import time
time.sleep(5)

Dans cet exemple, le programme « dort » pendant 5 secondes. Le paramètre transmis peut être un entier ou un nombre décimal, permettant ainsi des pauses de fractions de seconde.

Syntaxe :

time.sleep(seconds)

La fonction ne renvoie aucune valeur. Elle suspend simplement le thread actuel pendant la durée indiquée.

Exemple : retarder l’exécution du code

Voici un petit script qui affiche trois messages espacés de deux secondes :

import time
print("First message")
time.sleep(2)
print("Second message")
time.sleep(2)
print("Third message")

Lors de l’exécution, l’utilisateur verra une pause de 2 secondes entre chaque message. C’est ainsi que time.sleep(2) crée un délai en Python.

Paramètres de time.sleep()

La fonction accepte un seul paramètre, mais celui-ci peut être un entier ou un flottant. Cela offre une grande flexibilité pour définir des pauses.

Valeurs en secondes

La plupart du temps, on utilise un entier représentant le nombre de secondes :

time.sleep(10)

Le script s’interrompt ici pendant 10 secondes, idéal pour espacer les requêtes ou créer une longue pause.

Fractions de seconde (millisecondes)

Parfois, une pause plus courte suffit. Il est alors possible de passer un nombre à virgule:

time.sleep(0.5)

Cela crée une pause d’une demi-seconde. Cependant, à cause des limitations du système d’exploitation et de l’horloge interne de Python, la durée réelle peut légèrement dépasser la valeur indiquée. Dans les systèmes temps réel, il est préférable d’utiliser des outils de synchronisation plus précis.

Alternatives à time.sleep() en Python

Bien que time.sleep() soit le moyen le plus populaire et le plus simple pour insérer des pauses, d’autres méthodes sont parfois plus adaptées, notamment pour gérer des événements externes ou des exécutions concurrentes.

1. Utiliser input() pour marquer une pause

La manière la plus simple de suspendre un programme est d’utiliser input(). Cette fonction bloque l’exécution jusqu’à ce que l’utilisateur appuie sur Entrée ou saisisse une donnée.

print("Press Enter to continue...")
input()
print("Resuming program execution")

Ce n’est pas une pause chronométrée, mais une attente d’action utilisateur. Elle est utile pour le débogage ou dans des scripts interactifs, mais rarement dans des processus automatisés.

2. Utiliser threading.Event()

Dans un programme multithread, on peut utiliser des objets de synchronisation comme threading.Event(), qui bloquent un thread jusqu’à ce qu’un signal soit reçu.

import threading
event = threading.Event()

def worker():
    print("Starting work in thread")
    event.wait()
    print("Event received, resuming work")

thread = threading.Thread(target=worker)
thread.start()

import time
time.sleep(3)
event.set()

Ici, le thread reste bloqué jusqu’à l’appel de event.set(). Cette approche permet un contrôle plus souple : le thread peut être réveillé à tout moment, sans attendre la fin du délai.

3. Utiliser asyncio.sleep() dans un programme asynchrone

En programmation asynchrone (module asyncio), on utilise asyncio.sleep(). Contrairement à time.sleep(), cette fonction ne bloque pas tout le thread, mais uniquement la coroutine actuelle, permettant ainsi au boucle d’événements de continuer à exécuter d’autres tâches.

import asyncio

async def main():
    print("Start async work")
    await asyncio.sleep(2)
    print("2 seconds passed, resuming")

asyncio.run(main())

C’est particulièrement utile lorsque plusieurs fonctions asynchrones s’exécutent en parallèle. Si vous utilisiez time.sleep() dans ce contexte, cela bloquerait toute la boucle d’événements.

Problèmes courants avec time.sleep()

Même si time.sleep() est simple à utiliser, une mauvaise utilisation peut provoquer des blocages inattendus. Il est donc essentiel de comprendre comment elle affecte le déroulement du programme.

Blocage du thread principal

La fonction bloque le thread dans lequel elle est appelée. Dans une application à interface graphique (par exemple Tkinter ou PyQt), cela peut geler l’interface.

💡 Conseil :
N’utilisez time.sleep() que dans des threads secondaires ou remplacez-la par asyncio.sleep() pour éviter le blocage.
Dans les interfaces graphiques, préférez des minuteries comme QTimer ou la méthode after().

Utilisation dans du code multithread ou asynchrone

Dans un programme multithread, time.sleep() peut être appelée indépendamment dans chaque thread, mais elle ne libère pas automatiquement le Global Interpreter Lock (GIL). L’exécution d’autres threads dépend du planificateur du système d’exploitation.

Dans du code asynchrone, évitez d’utiliser time.sleep() dans une boucle d’événements (asyncio.run()), car elle la bloquerait entièrement.
Utilisez plutôt asyncio.sleep(), qui rend le contrôle au planificateur et laisse d’autres coroutines s’exécuter.

Exemple pratique : interroger une API périodiquement

Imaginons que vous écriviez un script pour interroger régulièrement une API, mais que ses règles imposent au moins 30 secondes entre chaque requête.

Solution avec time.sleep() :

import time
def poll_api():
    print("Making API request...")
def main():
    while True:
        poll_api()
        time.sleep(30)
if __name__ == "__main__":
    main()

Après chaque requête, le script se met en pause pendant 30 secondes, respectant ainsi les limites de fréquence.

Alternative asynchrone :

import asyncio
async def poll_api():
    print("Making API request...")
async def main():
    while True:
        await poll_api()
        await asyncio.sleep(30)
if __name__ == "__main__":
    asyncio.run(main())

Cette version ne bloque pas le programme : d’autres tâches peuvent s’exécuter en parallèle dans le même environnement asynchrone. C’est une approche plus flexible et évolutive.

Conclusion

Gérer les pauses et délais est un aspect important du développement Python.
time.sleep() est la méthode la plus simple et la plus directe, mais le choix entre time.sleep(), asyncio.sleep() et d’autres approches dépend de l’architecture du projet.

Recommandations clés :

  • Utilisez time.sleep() pour des pauses courtes dans les tests, entre les requêtes ou dans des démonstrations.

  • Ne bloquez pas le thread principal d’une application graphique.

  • Dans le code asynchrone, remplacez time.sleep() par asyncio.sleep().

  • Dans les programmes multithread, rappelez-vous que seul le thread courant est suspendu.

  • Pour attendre un événement ou une action utilisateur, utilisez threading.Event() ou input().
Programmation Python
14.10.2025
Reading time: 9 min

Similaire

Programmation Python

Comment obtenir la longueur d’une liste en Python

Les listes en Python sont utilisées presque partout. Dans ce tutoriel, nous allons examiner quatre façons de trouver la longueur d’une liste Python : en utilisant des fonctions intégrées, la récursion et une boucle. Connaître la longueur d’une liste est souvent indispensable pour l’itérer et effectuer diverses opérations. Fonction len() len() est une fonction intégrée de Python permettant de connaître la longueur d’une liste. Elle prend un argument — la liste elle-même — et renvoie un entier égal à la longueur de cette liste. La même fonction fonctionne également avec d’autres objets itérables, comme les chaînes de caractères. Country_list = ["The United States of America", "Cyprus", "Netherlands", "Germany"] count = len(Country_list) print("There are", count, "countries") Sortie : There are 4 countries Obtenir la longueur d’une liste avec une boucle Vous pouvez déterminer la longueur d’une liste en Python à l’aide d’une boucle for. L’idée consiste à parcourir toute la liste tout en incrémentant un compteur de 1 à chaque itération. Plaçons cela dans une fonction distincte : def list_length(list): counter = 0 for i in list: counter = counter + 1 return counter Country_list = ["The United States of America", "Cyprus", "Netherlands", "Germany", "Japan"] count = list_length(Country_list) print("There are", count, "countries") Sortie : There are 5 countries Obtenir la longueur d’une liste avec récursion La même tâche peut être accomplie avec de la récursion : def list_length_recursive(list): if not list: return 0 return 1 + list_length_recursive(list[1:]) Country_list = ["The United States of America", "Cyprus", "Netherlands","Germany", "Japan", "Poland"] count = list_length_recursive(Country_list) print("There are", count, "countries") Sortie : There are 6 countries Comment cela fonctionne. La fonction list_length_recursive() reçoit une liste en entrée. Si la liste est vide, elle renvoie 0 — la longueur d’une liste vide. Sinon, elle s’appelle récursivement avec l’argument list[1:], une tranche de la liste originale commençant à l’indice 1 (c’est-à-dire la liste sans l’élément à l’indice 0). Le résultat de cet appel est additionné à 1. À chaque étape récursive, la valeur renvoyée augmente de un tandis que la liste se réduit d’un élément. Fonction length_hint() La fonction length_hint() se trouve dans le module operator. Ce module contient des fonctions analogues aux opérateurs internes de Python : addition, soustraction, comparaison, etc. length_hint() renvoie la longueur d’objets itérables tels que les chaînes, tuples, dictionnaires et listes. Elle fonctionne de manière similaire à len() : from operator import length_hint Country_list = ["The United States of America", "Cyprus", "Netherlands","Germany", "Japan", "Poland", "Sweden"] count = length_hint(Country_list) print("There are", count, "countries") Sortie : There are 7 countries Notez que length_hint() doit être importée avant utilisation. Conclusion Dans ce guide, nous avons couvert quatre méthodes permettant de déterminer la longueur d’une liste en Python. Dans des conditions équivalentes, la méthode la plus efficace est len(). Les autres approches sont surtout utiles lorsque vous implémentez des classes personnalisées similaires à une liste.
04 December 2025 · 4 min to read
Réseaux

Comprendre les requêtes HTTP : structure, méthodes et exemples

HTTP est la clé de la communication sur Internet. Les méthodes du protocole HTTP permettent aux clients d’envoyer des requêtes aux serveurs et aux serveurs d’envoyer des réponses. Chaque site web sur la World Wide Web utilise des requêtes HTTP, d’où l’importance de bien les comprendre. Cet article explique le concept des requêtes HTTP, leur structure, les méthodes les plus courantes et plusieurs exemples pratiques pour mieux comprendre le fonctionnement du web. Qu’est-ce qu’une requête HTTP ? Une requête HTTP est un message dans lequel un client — par exemple un navigateur web — demande à l’hôte situé sur un serveur une ressource spécifique. Les clients utilisent des URL dans les requêtes HTTP afin d’indiquer au serveur quelles ressources ils souhaitent obtenir. Composants d’une requête HTTP Chaque requête HTTP se compose de trois parties : la ligne de requête (request line) les en-têtes (headers) le corps du message (message body) Request Line La request line est la première ligne d’une requête HTTP. Elle sert à initialiser une action sur le serveur. Elle précise la méthode HTTP et la version du protocole utilisées. Elle inclut également une URI ou une URL. Exemple : GET /index.html HTTP/1.1 Headers Les en-têtes suivent immédiatement la ligne de requête. Ils fournissent des informations supplémentaires du client vers le serveur, telles que : le nom d’hôte les détails du navigateur (User-Agent) les préférences linguistiques les types de contenu acceptés Les serveurs utilisent ces informations pour identifier le navigateur et le système d’exploitation du client. Les headers HTTP sont sensibles à la casse et suivent la syntaxe Nom: Valeur. Exemple de headers : Host: example.com User-Agent: Mozilla/5.0 (...) Accept: application/json, text/plain, */* Accept-Language: en-US,en;q=0.9 Accept-Encoding: gzip, deflate, br Connection: keep-alive Message Body Le message body sert à envoyer des données au serveur. Il est optionnel — toutes les requêtes HTTP n’en possèdent pas. Les méthodes qui utilisent un body sont généralement POST et parfois PUT. Le serveur traite ces données pour répondre correctement à la requête. Méthodes HTTP courantes Une requête HTTP relie un client à un serveur afin de réaliser différentes actions : récupérer une ressource envoyer des données mettre à jour un contenu supprimer une ressource Voici les méthodes les plus utilisées : GET — Récupérer des ressources La méthode GET est utilisée pour demander une ressource au serveur. Chaque fois que vous chargez une page web, votre navigateur envoie une requête GET. Caractéristiques : cacheable safe (sans effet secondaire) idempotent GET ne modifie pas l’état du serveur ; elle permet uniquement de lire des données. POST — Envoyer des données POST sert à envoyer des données au serveur — par exemple un formulaire ou un fichier. Le body contient les données envoyées. Des requêtes POST identiques peuvent créer plusieurs ressources. PUT — Mettre à jour des ressources PUT ressemble à POST, mais sert à remplacer des données existantes. Différence : POST = créer PUT = remplacer PUT est idempotente, ce qui signifie qu’envoyer la même requête plusieurs fois produit toujours le même résultat. DELETE — Supprimer des ressources DELETE demande au serveur de supprimer une ressource particulière. Si la suppression est réussie, le serveur renvoie une confirmation. DELETE est également idempotente. Qu’est-ce qu’une réponse HTTP ? Lorsqu’un serveur répond à une requête HTTP, il envoie une réponse HTTP. Sa structure est similaire à celle d’une requête HTTP : la ligne de statut les en-têtes le corps de la réponse Status Line Elle inclut : la version HTTP le code de statut le message de statut associé Headers Ils contiennent des informations telles que : la date et l’heure le type de contenu les détails du serveur les directives de cache Body Il contient les données retournées : HTML JSON XML images fichiers Codes de statut HTTP Les codes HTTP indiquent le résultat d’une requête. Ils comportent trois chiffres, dont le premier désigne la catégorie : Groupe Description 1xx Information — traitement en cours 2xx Succès — requête traitée correctement 3xx Redirection — action supplémentaire requise 4xx Erreur côté client 5xx Erreur côté serveur En-têtes HTTP et leur importance Les en-têtes fournissent des informations cruciales pour la communication client–serveur. Identification de l’hôte Indique le domaine servi par le serveur. Mise en cache Cache-Control et Expires définissent la durée de conservation d’une réponse. Gestion des cookies Set-Cookie et Cookie gèrent les sessions utilisateur. Sécurité Exemples : Authorization — authentification Content-Security-Policy — protection contre les attaques XSS Contrôle de la réponse Les headers indiquent si la requête a réussi ou échoué. Exemples pratiques de requêtes HTTP Ces exemples utilisent Python et la bibliothèque requests. GET import requests response = requests.get("https://api.example.com/data",                         params={"param1": "value1", "param2": "value2"}) print(response.status_code) print(response.json()) POST import requests url = "https://api.example.com/users" data = {     "username": "newuser",     "email": "newuser@example.com",     "password": "securepassword" } response = requests.post(url, json=data) if response.status_code == 201:     print("User created successfully:", response.json()) else:     print("Error:", response.status_code, response.text) PUT import requests url = "https://api.example.com/users/123" data = {     "username": "updateduser",     "email": "updateduser@example.com" } response = requests.put(url, json=data) if response.status_code == 200:     print("User updated successfully:", response.json()) else:     print("Error:", response.status_code, response.text) DELETE import requests url = "https://api.example.com/users/123" response = requests.delete(url) if response.status_code == 204:     print("User deleted successfully.") else:     print("Error:", response.status_code, response.text) Conclusion Les requêtes HTTP jouent un rôle essentiel dans les interactions web. Il est donc crucial de comprendre les différentes méthodes et leur fonctionnement. Choisir la bonne méthode garantit une communication fluide entre client et serveur et améliore l’efficacité des applications web.
01 December 2025 · 7 min to read
Programmation Python

Options de ligne de commande et analyse des arguments avec argparse en Python

Les interfaces en ligne de commande (CLI) sont parmi les moyens les plus rapides et les plus efficaces d’interagir avec un logiciel. Elles permettent d’exécuter des commandes directement, ce qui se traduit par une exécution plus rapide et des fonctionnalités enrichies. Les développeurs créent souvent des CLI en Python pour diverses applications, utilitaires et scripts d’automatisation, afin de traiter dynamiquement les entrées utilisateur. C’est ici qu’intervient le module argparse de Python. Le module argparse simplifie la gestion des entrées en ligne de commande et permet aux développeurs de créer des outils interactifs et conviviaux. Faisant partie de la bibliothèque standard, il permet de définir, traiter et valider les entrées sans nécessiter de logique complexe. Cet article présente les concepts essentiels, des exemples utiles et des fonctionnalités avancées du module argparse pour vous aider à créer rapidement des outils CLI fiables. Comment utiliser argparse en Python pour les interfaces en ligne de commande Étape 1 : Importer le module Importez le module dans votre script : import argparse Cela permet l’analyse des arguments transmis à un script Python via la ligne de commande. Étape 2 : Créer un objet ArgumentParser La classe ArgumentParser constitue l’élément central de l’API du module argparse. Commencez par créer une instance : parser = argparse.ArgumentParser(description="A Hostman tutorial on Python argparse.") Ici : description explique ce que fait le programme et s’affiche lorsqu’on utilise --help. Étape 3 : Ajouter des entrées et options Définissez les paramètres acceptés par votre programme à l’aide de add_argument() : parser.add_argument('filename', type=str, help="Name of the file to process") parser.add_argument('--verbose', action='store_true', help="Enable verbose mode") Explications : filename est obligatoire. --verbose est optionnel et active le mode verbeux. Étape 4 : Analyser les entrées utilisateur Traitez les arguments fournis : args = parser.parse_args() Les valeurs extraites sont accessibles sous forme d’attributs de l’objet args. Étape 5 : Utiliser les données traitées Exemple : print(f"File to process: {args.filename}") if args.verbose:     print("Verbose mode enabled") else:     print("Verbose mode disabled") Exemples d’utilisation de la CLI Traitement d’un fichier sans mode verbeux python3 file.py example.txt Traitement d’un fichier avec mode verbeux python3 file.py example.txt --verbose Afficher l’aide python3 file.py --help Exemples courants d’utilisation de argparse Exemple 1 : Ajouter des valeurs par défaut Les arguments optionnels peuvent disposer de valeurs par défaut. Ici, --timeout adopte une valeur par défaut de 30 secondes : import argparse parser = argparse.ArgumentParser(description="Demonstrating default argument values.") parser.add_argument('--timeout', type=int, default=30, help="Timeout in seconds (default: 30)") args = parser.parse_args() print(f"Timeout value: {args.timeout} seconds") Explications Importation du module Création de l’objet ArgumentParser Ajout de --timeout avec type entier et valeur par défaut Analyse avec parse_args() Cas 1 : valeur par défaut python file.py Cas 2 : valeur personnalisée python file.py --timeout 60 Exemple 2 : Utiliser choices Le paramètre choices limite un argument à une liste de valeurs valides : parser.add_argument('--mode', choices=['basic', 'advanced'], help="Choose the mode of operation") Cas 1 : valeur valide python3 file.py --mode basic Cas 2 : aucun argument python3 file.py Cas 3 : valeur non valide python3 file.py --mode intermediate Exemple 3 : Gérer plusieurs valeurs Le paramètre nargs='+' permet d’accepter plusieurs valeurs pour un même argument : parser.add_argument('--numbers', nargs='+', type=int, help="List of numbers to process") Cas 1 : plusieurs valeurs python3 file.py --numbers 10 20 30 Cas 2 : une seule valeur python3 file.py --numbers 5 Cas 3 : aucune valeur python3 file.py Cas 4 : entrée non valide python3 file.py --numbers 10 abc 20 Exemple 4 : Arguments optionnels obligatoires Bien que les arguments commençant par -- soient optionnels, ils peuvent être rendus obligatoires avec required=True : parser.add_argument('--config', required=True, help="Path to the configuration file") Cas 1 : entrée valide python3 file.py --config settings.json Cas 2 : absence de l’argument obligatoire python3 file.py Fonctionnalités avancées Flags booléens parser.add_argument('--debug', action='store_true', help="Enable debugging mode") Regrouper des arguments liés group = parser.add_argument_group('File Operations') group.add_argument('--input', type=str, help="Input file") group.add_argument('--output', type=str, help="Output file") Arguments mutuellement exclusifs group = parser.add_mutually_exclusive_group() group.add_argument('--json', action='store_true', help="Output in JSON format") group.add_argument('--xml', action='store_true', help="Output in XML format") Conclusion Le module argparse simplifie la création de CLI robustes pour traiter les arguments de ligne de commande en Python. Des paramètres de base aux options avancées comme choices et nargs, les développeurs peuvent créer des outils puissants, fiables et faciles à utiliser. Donner des noms clairs aux arguments et rédiger de bonnes descriptions contribue également à rendre les scripts plus lisibles et plus simples à maintenir.
25 November 2025 · 5 min to read

Avez-vous des questions,
des commentaires ou
des préoccupations ?

Nos professionnels sont disponibles pour vous aider à tout moment,
que vous ayez besoin d'aide ou que vous ne sachiez pas par où commencer.
Envoyez-nous un e-mail
Hostman's Support