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

Post on 15-Feb-2017

270 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

async & awaitda teoria à prática

Julio Freitas

juliofreitas.net@juliomfreitas github.com/juliomfreitasjulio.martins.freitas@gmail.com

py3.5

Roadmap

1. Modelos de Programação Concorrente2. Solução Definida3. 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?

continuationsfutures and promises

Dúvidas?

Obrigado!<juliofreitas.net>

top related