17. Execução Concorrente
************************

Os módulos descritos neste capítulo fornecem suporte a execução
simultânea de código. A escolha apropriada da ferramenta dependerá da
tarefa a ser executada (CPU bound ou IO bound) e do estilo de
desenvolvimento preferencial (multitarefa cooperativa orientada a
eventos versus multitarefa preemptiva). Eis uma visão geral:

* 17.1. "threading" ---  Paralelismo baseado em Thread

  * 17.1.1. Thread-Local Data

  * 17.1.2. Thread Objects

  * 17.1.3. Lock Objects

  * 17.1.4. Objetos RLock

  * 17.1.5. Condition Objects

  * 17.1.6. Semaphore Objects

    * 17.1.6.1. Exemplo "Semaphore"

  * 17.1.7. Event Objects

  * 17.1.8. Objetos Timer

  * 17.1.9. Barrier Objects

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

* 17.2. "multiprocessing" --- Process-based parallelism

  * 17.2.1. Introdução

    * 17.2.1.1. A classe "Process"

    * 17.2.1.2. Contextos e métodos de inicialização

    * 17.2.1.3. Exchanging objects between processes

    * 17.2.1.4. Sincronização entre processos

    * 17.2.1.5. Sharing state between processes

    * 17.2.1.6. Using a pool of workers

  * 17.2.2. Referência

    * 17.2.2.1. "Process" and exceptions

    * 17.2.2.2. Pipes and Queues

    * 17.2.2.3. Diversos

    * 17.2.2.4. Connection Objects

    * 17.2.2.5. Synchronization primitives

    * 17.2.2.6. Shared "ctypes" Objects

      * 17.2.2.6.1. The "multiprocessing.sharedctypes" module

    * 17.2.2.7. Gerenciadores

      * 17.2.2.7.1. Customized managers

      * 17.2.2.7.2. Using a remote manager

    * 17.2.2.8. Proxy Objects

      * 17.2.2.8.1. Cleanup

    * 17.2.2.9. Process Pools

    * 17.2.2.10. Listeners and Clients

      * 17.2.2.10.1. Formatos de Endereços

    * 17.2.2.11. Authentication keys

    * 17.2.2.12. Gerando logs

    * 17.2.2.13. The "multiprocessing.dummy" module

  * 17.2.3. Programming guidelines

    * 17.2.3.1. All start methods

    * 17.2.3.2. The *spawn* and *forkserver* start methods

  * 17.2.4. Exemplos

* 17.3. O pacote "concurrent"

* 17.4. "concurrent.futures" --- Iniciando tarefas em paralelo

  * 17.4.1. Executor Objects

  * 17.4.2. ThreadPoolExecutor

    * 17.4.2.1. Exemplo de ThreadPoolExecutor

  * 17.4.3. "`ProcessPoolExecutor`"

    * 17.4.3.1. ProcessPoolExecutor Example

  * 17.4.4. Future Objects

  * 17.4.5. Module Functions

  * 17.4.6. Exception classes

* 17.5. "subprocess" --- Gerenciamento de subprocessos

  * 17.5.1. Usando o módulo "subprocess"

    * 17.5.1.1. Argumentos Usados Freqüentemente

    * 17.5.1.2. Construtor Popen

    * 17.5.1.3. Exceções

  * 17.5.2. Considerações de Segurança

  * 17.5.3. Objetos Popen

  * 17.5.4. Windows Popen Helpers

    * 17.5.4.1. Constantes

  * 17.5.5. API de alto nível mais antiga

  * 17.5.6. Replacing Older Functions with the "subprocess" Module

    * 17.5.6.1. Replacing /bin/sh shell backquote

    * 17.5.6.2. Replacing shell pipeline

    * 17.5.6.3. Substituindo "os.system()"

    * 17.5.6.4. Replacing the "os.spawn" family

    * 17.5.6.5. Replacing "os.popen()", "os.popen2()", "os.popen3()"

    * 17.5.6.6. Replacing functions from the "popen2" module

  * 17.5.7. Legacy Shell Invocation Functions

  * 17.5.8. Notas

    * 17.5.8.1. Converter uma sequência de argumentos em uma string no
      Windows

* 17.6. "sched" --- Event scheduler

  * 17.6.1. Objetos Scheduler

* 17.7. "queue" --- A synchronized queue class

  * 17.7.1. Objetos Queue

A seguir, os módulos de suporte para alguns dos serviços acima:

* 17.8. "dummy_threading" --- Substituição drop-in para o módulo
  "threading"

* 17.9. :mod:thread--- API de segmentação de baixo nível

* 17.10. "_dummy_thread" --- Substituição direta para o módulo
  "_thread"
