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" --- Thread-based parallelism

  * Introduction

  * GIL and performance considerations

  * Référence

    * Thread-local data

    * Thread objects

    * Lock objects

    * RLock objects

    * Condition objects

    * Semaphore objects

    * "Semaphore" example

    * Event objects

    * Timer objects

    * Barrier objects

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

* "multiprocessing" --- Process-based parallelism

  * 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 pool de *workers*

  * Référence

    * Global start method

    * "Process" et exceptions

    * Tubes (*pipes*) et files (*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

    * Pools 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" --- Shared memory for direct access
  across processes

* The "concurrent" package

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

  * Executor Objects

  * ThreadPoolExecutor

    * ThreadPoolExecutor Example

  * InterpreterPoolExecutor

  * ProcessPoolExecutor

    * ProcessPoolExecutor Example

  * Future Objects

  * Module Functions

  * Exception classes

* "concurrent.interpreters" --- Multiple interpreters in the same
  process

  * Key details

  * Introduction

    * Multiple Interpreters and Isolation

    * Running in an Interpreter

    * Concurrency and Parallelism

    * Communication Between Interpreters

    * "Sharing" Objects

  * Référence

    * Interpreter objects

    * Exceptions

    * Communicating Between Interpreters

  * Utilisation de base

* "subprocess" --- Subprocess management

  * 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"

    * Replacing "os.popen()"

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

  * Notes

    * Timeout Behavior

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

    * Disable use of "posix_spawn()"

* "sched" --- Event scheduler

  * Scheduler Objects

* "queue" --- A synchronized queue class

  * Objets "Queue"

    * Waiting for task completion

    * Terminating queues

  * Objets "SimpleQueue"

* "contextvars" --- Context Variables

  * Variables de contexte

  * Gestion de contexte manuelle

  * Gestion avec *asyncio*

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

* "_thread" --- Low-level threading API
