async & await
da teoria à prática
Julio Freitas
juliofreitas.net
@juliomfreitas
github.com/juliomfreitas
julio.martins.freitas@gmail.com
py3.5
Roadmap
1. Modelos de Programação Concorrente
2. Solução Definida
3. Suporte Teórico
“programming is thinking
not typing”
paradigmas de
programação
concorrente
Programação
Linear
Programação Linear
Uma tarefa após a outra
Ordem de execução bem definida
Programação
Paralela
Programação Paralela
Máquinas/CPUs diferentes executando tarefas
Arquitetura cara como um todo
Comunicação entre as tarefas normalmente é lenta
Programação
Concorrente
(threads)
Programação Concorrente (threads)
Necessário controlar a quantidade de threads, alocar
threads/core
Criar uma thread é considerado caro em termos de
processamento e alocação exigidos
É preciso sincronizá-las manualmente
Impossível prever a ordem de execução, definida pelo SO
Programação
Concorrente
(assíncrona)
Programação Concorrente (async)
A ideia é processar outras coisas enquanto espera algum
recurso estar disponível
Requisição a serviço externo
Longa query em um banco de dados
Abrir
Programação Concorrente (async)
Menos controle sobre infraestrutura de execução (pool,
threads/core…)
Aproveita-se as threads que já existem do sistema (1...n)
A ideia é que a tarefa executada abdica do controle enquanto
espera pelo seu recurso bloqueante
programação
assíncrona
assyncio (py3.5)
Coroutine
Tarefa assíncrona
Define quando suspender a si mesma
EventLoop
Controlador das execuções
As corrotinas não interagem diretamente com o EventLoop
Quando uma corrotina decide se suspender, o EventLoop
coordena a próxima tarefa a executar
EventLoop
Em python, o usuário define o início e o final do loop de
tarefas assíncronas
asyncio
Elegante
É como se o código fosse linear
asyncio
mais?
continuations
futures and promises
Dúvidas?
Obrigado!
<juliofreitas.net>

Introdução a Programação Assíncrona Python 3.5 asyncio