Multithreading

4 h 5 exercices Niveau 9

L'exécution de plusieurs threads est similaire à l'exécution simultanée de plusieurs programmes différents, mais avec les avantages suivants :

  • Plusieurs threads au sein d'un processus partagent le même espace de données avec le thread principal et peuvent donc partager des informations ou communiquer entre eux plus facilement que s'il s'agissait de processus distincts.
  • Les threads sont parfois appelés processus légers et ils ne nécessitent pas beaucoup de mémoire ; ils sont moins chers que les processus.

Un thread a un début, une séquence d'exécution et une conclusion. Il possède un pointeur d'instruction qui permet de savoir où, dans son contexte, il s'exécute actuellement.

  • Il peut être préempté (interrompu).
  • Il peut être temporairement mis en attente (aussi appelé "sleeping") pendant que d'autres threads sont en cours d'exécution - c'est ce qu'on appelle le yielding.

Il existe deux types de threads différents

  • le thread du noyau
  • thread utilisateur

Les threads du noyau font partie du système d'exploitation, tandis que les threads de l'espace utilisateur ne sont pas implémentés dans le noyau.

Il y a deux modules qui supportent l'utilisation des threads dans Python3 :

  • _thread
  • threading

Le module thread est "déprécié" depuis un certain temps. Les utilisateurs sont encouragés à utiliser le module threading à la place. Par conséquent, dans Python 3, le module "thread" n'est plus disponible. Cependant, il a été renommé en "_thread" pour des raisons de compatibilité avec Python 3.

Démarrer un nouveau fil de discussion

Pour créer un autre thread, vous devez appeler la méthode suivante disponible dans le module thread :

_thread.start_new_thread(function, args[, kwargs])

Cet appel de méthode constitue un moyen rapide et efficace de créer de nouveaux threads sous Linux et Windows.

L'appel de méthode revient immédiatement et le thread enfant démarre et appelle la fonction avec la liste d'arguments passée. Lorsque la fonction revient, le thread se termine.

Ici, args est un tuple d'arguments ; utilisez un tuple vide pour appeler la fonction sans passer d'arguments. kwargs est un dictionnaire optionnel d'arguments de mots-clés.

Exemple

#!/usr/bin/python3

import _thread
import time

# Define a function for the thread
def print_time(threadName, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print("%s: %s" % (threadName, time.ctime(time.time())))

# Create two threads as follows
try:
    _thread.start_new_thread(print_time, ("Thread-1", 2, ))
    _thread.start_new_thread(print_time, ("Thread-2", 4, ))
except:
    print("Error: unable to start thread")

while 1:
    pass

Résultat

logo discord

Besoin d'aide ?

Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !

En savoir plus