introdução a programação assíncrona python 3.5 asyncio

23
async & await da teoria à prática Julio Freitas juliofreitas.net @juliomfreitas github.com/juliomfreitas [email protected] py3.5

Upload: julio-freitas

Post on 15-Feb-2017

270 views

Category:

Engineering


0 download

TRANSCRIPT

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

async & awaitda teoria à prática

Julio Freitas

juliofreitas.net@juliomfreitas github.com/[email protected]

py3.5

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

Roadmap

1. Modelos de Programação Concorrente2. Solução Definida3. Suporte Teórico

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

“programming is thinking not typing”

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

paradigmas de programação concorrente

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

Programação Linear

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

Programação Linear

Uma tarefa após a outra

Ordem de execução bem definida

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

Programação Paralela

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

Programação Paralela

Máquinas/CPUs diferentes executando tarefas

Arquitetura cara como um todo

Comunicação entre as tarefas normalmente é lenta

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

Programação Concorrente

(threads)

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

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

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

Programação Concorrente

(assíncrona)

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

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

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

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

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

programação assíncrona

assyncio (py3.5)

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

Coroutine

Tarefa assíncrona

Define quando suspender a si mesma

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

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

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

EventLoop

Em python, o usuário define o início e o final do loop de tarefas assíncronas

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

asyncio

Elegante

É como se o código fosse linear

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

asyncio

Page 20: Introdução a Programação Assíncrona Python 3.5 asyncio
Page 21: Introdução a Programação Assíncrona Python 3.5 asyncio

mais?

continuationsfutures and promises

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

Dúvidas?

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

Obrigado!<juliofreitas.net>