Criar conta grátis

Programação Assíncrona e Concorrência

18. Concorrência e assincronismo em Python

18º capítulo da apostila Programação Assíncrona e Concorrência: estudo contínuo e em linguagem simples sobre Concorrência e assincronismo em Python, com conceitos conectados, aplicações e mapa mental.

31 min de leitura30 questões para praticarRevisado em 14/09/2026

Este capítulo nasce das 30 questões publicadas sobre Concorrência e assincronismo em Python. A leitura do acervo revelou 30 núcleos de conhecimento, aqui reorganizados como uma explicação progressiva: primeiro o vocabulário e o modelo mental, depois os mecanismos, as decisões de implementação, os limites e a forma de verificar o comportamento do sistema.

Com modelos e componentes definidos, estudamos tarefas que avançam no tempo e disputam recursos. Ordem, estado compartilhado, sincronização, cancelamento e falhas precisam ser analisados em conjunto. Este é o capítulo 18 de 20 da disciplina Programação Assíncrona e Concorrência. Ele retoma Assincronismo em JavaScript e Node.js e utiliza essa base para avançar. Na sequência, estudaremos Concorrência em Java.

O fio condutor

O desenvolvimento de software começa com um problema e avança por decisões que precisam permanecer compreensíveis e verificáveis. Requisitos orientam modelos; modelos orientam código e arquitetura; testes verificam comportamento; e a operação devolve informações para o próximo ciclo. Uma falha importante no início tende a se espalhar pelas etapas seguintes.

Neste capítulo, use Concorrência e assincronismo em Python para acompanhar quatro perguntas: qual problema precisa ser resolvido, como o mecanismo funciona, que consequências a escolha produz e como o resultado será verificado. Essa sequência transforma termos técnicos em decisões que podem ser explicadas e testadas.

Parte 1 — Fundamentos e vocabulário

Começamos por Parte 1 — Fundamentos e vocabulário, pois essa base organiza os conceitos e exemplos que aparecerão no restante do capítulo.

Global Interpreter Lock serializa a execução de bytecode Python entre threads do mesmo

O ponto de partida é estabelecer o significado do conceito e o problema que ele procura organizar. O Global Interpreter Lock serializa a execução de bytecode Python entre threads do mesmo processo CPython tradicional. Extensões nativas e operações bloqueantes podem liberar o lock, permitindo que outra thread avance. Por isso, threads continuam úteis para muitas cargas I/O-bound, apesar de não escalarem cálculo Python puro em vários núcleos. A regra ganha sentido quando suas consequências orientam a implementação.

Para aplicar Global Interpreter Lock serializa a execução de bytecode Python entre threads do mesmo, acompanhe a execução desde a entrada até a saída e anote pré-condições, mudança de estado, custo e falhas possíveis. Assim o conceito deixa de ser um rótulo e passa a orientar decisões.

Use como teste da compreensão: Na compilação tradicional do CPython com GIL, apenas uma thread por processo executa bytecode Python por vez, embora operações de I/O possam liberar o GIL enquanto aguardam. Depois verifique a afirmação com execução controlada, teste automatizado, análise do contrato, medição ou documentação da versão correspondente. A evidência deve reproduzir a propriedade afirmada, inclusive nos casos de erro e de fronteira.

GIL impede que várias threads do mesmo processo executem simultaneamente bytecode Python

A partir dessa distinção, o próximo elemento completa o fluxo. O GIL impede que várias threads do mesmo processo executem simultaneamente bytecode Python nessa configuração. Trocas de thread podem inclusive acrescentar overhead sem aumentar throughput do cálculo. Processos separados, extensões que liberam o GIL ou outra estratégia nativa são caminhos usuais para explorar vários núcleos. Observe como definição, mecanismo e efeito permanecem ligados.

Continue lendo de graça

O capítulo inteiro está liberado no plano gratuito

Criar conta leva menos de um minuto e não pede cartão. Você destrava o texto completo, o mapa mental, o PDF para estudar off-line e ainda resolve questões inéditas todo dia.

Leu o resumo? Agora pratique.

São 30 questões inéditas de Concorrência e assincronismo em Python, todas comentadas alternativa por alternativa.

Criar conta grátis e praticar

Você volta para este capítulo depois de criar a conta.

Fontes consultadas

  • documentação oficial de threading e FAQ do Python.
  • documentação de threading e multiprocessing.
  • documentação oficial de asyncio e corrotinas.
  • documentação de asyncio.run.
  • documentação oficial de asyncio, seção sobre código bloqueante.
  • documentação de asyncio.gather.
  • documentação oficial de multiprocessing.
  • documentação de concurrent.futures.ProcessPoolExecutor.
  • documentação de concurrent.futures.
  • documentação de threading.Lock.
  • documentação oficial de asyncio.Task e TaskGroup.
  • documentação de asyncio.to_thread.
  • PEP 703 e documentação What's New in Python 3.13.
  • documentação de asyncio.Task cancellation.
  • documentação de threading e concurrent.futures.
  • documentação oficial de concurrent.futures.
  • documentação de asyncio.create_task e asyncio.Task.
  • documentação oficial de asyncio sobre execução de código bloqueante.
  • documentação de asyncio.Queue.
  • documentação de asyncio e ProcessPoolExecutor.