Python - Création d'un Thread
Bonjour, aspirants programmeurs Python ! Aujourd'hui, nous allons plonger dans le monde passionnant des threads. Ne vous inquiétez pas si vous n'avez jamais entendu parler de threads avant – nous commencerons par les bases et nous nous dirigerons vers des concepts plus avancés. À la fin de ce tutoriel, vous créerez des threads comme un pro !
Qu'est-ce qu'un Thread ?
Avant de nous lancer dans la création de threads, voyons ce qu'ils sont. Imaginez que vous cuisinez un plat complexe. Vous ne faites pas tout les uns après les autres – vous pouvez avoir des pâtes qui bouillissent sur un brûleur tout en coupant des légumes sur le plan de coupe. C'est un peu ce que font les threads en programmation. Ils permettent à différents parties de votre programme de s'exécuter concurremment, rendant votre code plus efficace.
Création de Threads avec des Fonctions
La manière la plus simple de créer un thread en Python est d'utiliser une fonction. Commençons par un exemple de base :
import threading
import time
def print_numbers():
for i in range(5):
print(f"Nombre {i}")
time.sleep(1)
# Créer un thread
thread = threading.Thread(target=print_numbers)
# Démarrer le thread
thread.start()
print("Le thread principal continue à s'exécuter")
# Attendre que le thread se termine
thread.join()
print("Le thread a terminé")
Analysons cela :
- Nous importons le module
threading
, qui fournit les outils dont nous avons besoin pour travailler avec les threads. - Nous définissons une fonction simple
print_numbers()
qui imprime des nombres de 0 à 4, avec une pause de 1 seconde entre chaque impression. - Nous créons un thread en utilisant
threading.Thread()
, en spécifiant notre fonction commetarget
. - Nous démarrons le thread avec
thread.start()
. - Le programme principal continue à s'exécuter, imprimant "Le thread principal continue à s'exécuter".
- Nous utilisons
thread.join()
pour attendre que notre thread se termine avant de passer à la suite.
Lorsque vous exécutez cela, vous verrez que "Le thread principal continue à s'exécuter" est imprimé immédiatement, tandis que les nombres sont imprimés en arrière-plan. C'est le pouvoir des threads !
Création de Threads en Étendant la Classe Thread
Une autre manière de créer des threads est d'étendre la classe Thread
. Cette méthode est utile lorsque vous souhaitez créer un objet thread réutilisable. Voici un exemple :
import threading
import time
class NumberPrinter(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
for i in range(5):
print(f"{self.name} : Nombre {i}")
time.sleep(1)
# Créer deux threads
thread1 = NumberPrinter("Thread 1")
thread2 = NumberPrinter("Thread 2")
# Démarrer les threads
thread1.start()
thread2.start()
print("Le thread principal continue à s'exécuter")
# Attendre que les deux threads se terminent
thread1.join()
thread2.join()
print("Les deux threads ont terminé")
Dans cet exemple :
- Nous définissons une classe
NumberPrinter
qui étendthreading.Thread
. - Nous redéfinissons la méthode
__init__
pour accepter un nom pour notre thread. - Nous redéfinissons la méthode
run
, qui est appelée lorsque le thread démarre. - Nous créons deux instances de notre classe
NumberPrinter
et les démarrons. - Les deux threads s'exécutent concurremment, imprimant leurs nombres.
Cette méthode nous donne plus de contrôle sur nos threads et nous permet de créer plusieurs instances facilement.
Création de Threads en Utilisant la Fonction start_new_thread()
Il y a une troisième manière de créer des threads en Python, en utilisant la fonction start_new_thread()
du module _thread
. Cependant, cette méthode est considérée comme de bas niveau et n'est pas recommandée pour la plupart des cas d'utilisation. Voici un exemple pour la complétude :
import _thread
import time
def print_numbers(thread_name):
for i in range(5):
print(f"{thread_name} : Nombre {i}")
time.sleep(1)
# Démarrer deux nouveaux threads
try:
_thread.start_new_thread(print_numbers, ("Thread 1",))
_thread.start_new_thread(print_numbers, ("Thread 2",))
except:
print("Erreur : impossible de démarrer le thread")
# Maintenir le thread principal en vie
time.sleep(6)
print("Le thread principal quitte")
Cette méthode est moins flexible et ne fournit pas autant de contrôle que les méthodes précédentes. Il est également plus difficile d'attendre la fin des threads avec cette approche.
Comparaison des Méthodes de Création de Threads
Voici une comparaison rapide des trois méthodes que nous avons discutées :
Méthode | Avantages | Inconvénients |
---|---|---|
Utilisation de Fonctions | Simple à implémenter, adapté aux tâches ponctuelles | Moins réutilisable, contrôle limité |
Étendre la Classe Thread | Réutilisable, plus de contrôle, orienté objet | Un peu plus complexe à configurer |
start_new_thread() | Contrôle de bas niveau | Plus difficile à gérer, moins flexible, non recommandé |
Conclusion
Félicitations ! Vous avez juste pris vos premiers pas dans le monde des threads en Python. Nous avons couvert trois différentes manières de créer des threads, chacune ayant ses propres avantages et cas d'utilisation. Rappelez-vous, les threads peuvent rendre vos programmes plus efficaces, mais ils introduisent également une complexité. À mesure que vous continuez votre voyage en Python, vous apprendrez plus sur quand et comment utiliser efficacement les threads.
Continuez à pratiquer, et bientôt vous utiliserez les threads comme un programmeur chevronné. Bon codage !
Credits: Image by storyset