Ceci est un résumé de mon tutoriel PyCon 2020. Vous pouvez trouver la vidéo originale et le code source ici : https://github.com/santiagobasulto/pycon-concurrency-tutorial-2020
C’est un guide/tutoriel rapide sur la façon d’écrire efficacement des programmes concurrents en utilisant Python. La simultanéité en Python peut être déroutante. Il existe de multiples modules (threading
, _thread
, multiprocessing
, subprocess
). Il y a aussi la très détestée GIL, mais seulement pour CPython (PyPy et Jython n’ont pas de GIL). Les collections ne sont pas thread safe, sauf pour certains détails de mise en œuvre avec CPython.
L’objectif de ce tutoriel est de fournir des recommandations terre à terre sur la façon d’aborder chaque cas d’utilisation de code concurrent (ou parallèle).
Vous remarquerez que, contrairement à certains autres tutoriels Python plus traditionnels « multithreading only », je commence par un résumé à la fois de l’architecture des ordinateurs et des concepts des systèmes d’exploitation. La compréhension de ces concepts de base est fondamentale pour construire correctement des programmes concurrents. Veuillez sauter ces sections si vous êtes déjà familier avec ces sujets.
Ce tutoriel est divisé en sections suivantes :
- Concurrence vs Parallélisme
- Architecture de l’ordinateur
- Le rôle du système d’exploitation
- Threads avec Python
- Synchronisation des threads
- Multiprocessing
- Bibliothèques de haut niveau :
concurrent.futures
etparallel
Concurrence vs Parallélisme
Le parallélisme consiste à exécuter plusieurs tâches en même temps. C’est l’objectif ultime des programmes concurrents. La concurence est moins que le parallélisme, cela signifie que nous lançons plusieurs tâches et que nous jonglons avec elles dans le même laps de temps. Cependant, à tout moment, nous n’en faisons qu’une à la fois.
Appliqués à la cuisine, ce seraient des exemples de concomitance et de parallélisme.
La concomitance n’a qu’une seule personne dans la cuisine:
- Commencer à couper les oignons
- Commencer à chauffer la poêle
- Finir de couper les oignons
Dans ce cas, il est clair que nous ne pouvons pas faire plusieurs choses EN MÊME TEMPS. On peut toutes les commencer, mais il faut rebondir pour les contrôler.
Le parallélisme a plusieurs personnes dans la cuisine :
- La personne 1 coupe les oignons
- La personne 2 coupe les poivrons rouges
- La personne 3 attend que la poêle chauffe
Dans ce cas, il y a plusieurs tâches qui se font en même temps.
Architecture d’ordinateur
Tous les ordinateurs modernes peuvent être simplifiés en utilisant l’architecture de von Neumann, qui a 3 composants principaux : Calcul (CPU), Mémoire (RAM), E/S (disques durs, réseaux, sortie vidéo).