Exécution concourante
*********************

Les modules documentés dans ce chapitre fournissent des outils
d'exécution concourante de code. Le choix de l'outil approprié dépend
de la tâche à exécuter (limitée par le CPU (*CPU bound*), ou limitée
la vitesse des entrées-sorties (*IO bound*)) et du style de
développement désiré (coopération gérée par des évènements ou
multitâche préemptif). En voici un survol :

* "threading" — Parallélisme basé sur les fils d’exécution (*threads*)

  * Données locales au fil d'exécution

  * Objets *Threads*

  * Verrous

  * RLock Objects

  * Condition Objects

  * Semaphore Objects

    * "Semaphore" Example

  * Event Objects

  * Timer Objects

  * Barrier Objects

  * Using locks, conditions, and semaphores in the "with" statement

* "multiprocessing" — Parallélisme par processus

  * Introduction

    * La classe "Process"

    * Contextes et méthodes de démarrage

    * Échange d'objets entre les processus

    * Synchronisation entre processus

    * Partager un état entre les processus

    * Utiliser un réservoir de *workers*

  * Référence

    * "Process" et exceptions

    * Tubes (*pipes*) et Queues

    * Divers

    * Objets de connexions

    * Primitives de synchronisation

    * Objets "ctypes" partagés

      * Le module "multiprocessing.sharedctypes"

    * Gestionnaires

      * Gestionnaires personnalisés

      * Utiliser un gestionnaire distant

    * Objets mandataires

      * Nettoyage

    * Bassins de processus

    * Auditeurs et Clients

      * Formats d'adresses

    * Clés d'authentification

    * Journalisation

    * Le module "multiprocessing.dummy"

  * Lignes directrices de programmation

    * Toutes les méthodes de démarrage

    * Les méthodes de démarrage *spawn* et *forkserver*

  * Exemples

* "multiprocessing.shared_memory" — Mémoire partagée en accès direct
  depuis plusieurs processus

* Le paquet "concurrent"

* "concurrent.futures" --- Launching parallel tasks

  * Executor Objects

  * ThreadPoolExecutor

    * ThreadPoolExecutor Example

  * ProcessPoolExecutor

    * ProcessPoolExecutor Example

  * Future Objects

  * Module Functions

  * Exception classes

* "subprocess" — Gestion de sous-processus

  * Utiliser le module "subprocess"

    * Arguments fréquemment utilisés

    * Constructeur de *Popen*

    * Exceptions

  * Considérations de sécurité

  * Objets *Popen*

  * Utilitaires *Popen* pour Windows

    * Constantes Windows

  * Ancienne interface (*API*) haut-niveau

  * Remplacer les fonctions plus anciennes par le module "subprocess"

    * Remplacement de la substitution de commandes de terminal
      **/bin/sh**

    * Remplacer les *pipes* du *shell*

    * Remplacer "os.system()"

    * Remplacer les fonctions de la famille "os.spawn"

    * Remplacer "os.popen()", "os.popen2()", "os.popen3()"

    * Remplacer les fonctions du module "popen2"

  * Remplacement des fonctions originales d'invocation du *shell*

  * Notes

    * Convertir une séquence d'arguments vers une chaîne de caractères
      sous Windows

* "sched" --- Event scheduler

  * Scheduler Objects

* "queue" — File synchronisée

  * Objets "Queue"

  * Objets "SimpleQueue"

* "contextvars" — Variables de contexte

  * Variables de contexte

  * Gestion de contexte manuelle

  * Gestion avec *asyncio*

Les modules suivants servent de fondation pour certains services cités
ci-dessus.

* "_thread" — API bas niveau de gestion de fils d'exécution

* "_dummy_thread" --- Module de substitution pour le module "_thread"

* "dummy_threading" --- Module de substitution au module "threading"
