python async

13

Click here to load reader

Upload: leonardo-rossetti

Post on 16-Apr-2017

294 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Python async

PYTHON ASYNCLEONARDO ROSSETTI

Page 2: Python async

PYTHON ASYNC

WHOAMI

▸ Leonardo Rossetti

▸ @odranoel

[email protected]

▸ Python since 2007

▸ Fundador da Goldark (http://www.goldark.com.br)

▸ 100% python

▸ Plataforma e desenvolvimento de backend

▸ Arquitetura de microservices

Page 3: Python async

PYTHON ASYNC

ASSINCRONISMO

▸ Single-thread

▸ I/O concurrency

▸ Non-blocking sockets

▸ epoll/kqueue

▸ Event loop

▸ http://kegel.com/c10k.html

Page 4: Python async

PYTHON ASYNC

ASYNC - MOTIVAÇÕES (POSSÍVEIS)

▸ backend está lento (requisições)

▸ muitas conexões simultâneas

▸ uso de web sockets (ou algo semelhante)

▸ se o se problema for relacionado a processamento/cpu

▸ algum driver usado não é async

▸ não é um canivete suíço

Page 5: Python async

PYTHON ASYNC

ASSINCRONISMO - COMPARAÇÕESSingle Threaded

Tem

po d

e ex

ecuç

ão

Multi Threaded Async/Event DrivenTask 1

Task 2

Task 3

Page 6: Python async

PYTHON ASYNC

ASYNC FRAMEWORKS

▸ Twisted

▸ Tornado

▸ Gevent

Page 7: Python async

PYTHON ASYNC

FRAMEWORKS - TWISTED

▸ event driven engine & reactor pattern

▸ HTTP, TCP, UDP, IRC, FTP, IMAP, etc

▸ Lançado em 2002

▸ zeromq + twisted = http://txzmq.readthedocs.org/en/latest/

▸ curva de aprendizado consideravelmente alta

▸ necessário o uso de callbacks

Page 8: Python async

PYTHON ASYNC

FRAMEWORKS - TORNADO

▸ Criado pelo friendfeed

▸ Suporta HTTP, TCP e Websockets

▸ Pode usar o event loop do asyncio, gevent ou twisted

▸ Suporta coroutines e callbacks

▸ Foco em suportar o maior número de requisições simultâneas

▸ Suporte a alguns drivers como do MongoDB (Motor e MotorEngine)

▸ Future Tasks com yield

Page 9: Python async

PYTHON ASYNC

FRAMEWORKS - GEVENT

▸ engine com base no libev

▸ coroutines baseadas em greenlets

▸ melhor maneira de tornar um código escrito sincronamente em async

▸ Suporte a monkey patch em diversos projetos como flask, pymongo etc

▸ Não é suportado no pypy :(

Page 10: Python async

PYTHON ASYNC

FRAMEWORKS - GEVENT (PYMONGO)

Page 11: Python async

PYTHON ASYNC

ASYNCIO

▸ pep 3156(tulip)

▸ stdlib >= python 3.4

▸ std event loop

▸ coroutines, await e async keywords >= python 3.5

▸ Não é mais necessário reinventar a roda a cada framework/lib async

Page 12: Python async

PYTHON ASYNC

ASYNCIO - AIOHTTP

▸ asyncio não possui uma interface padrão para http

▸ aiohttp comes to the rescue: http://aiohttp.readthedocs.org/en/stable/

▸ Simple server API:

▸ middlewares (interfere no web handler)

▸ signals (interfere na requisição, muda headers, parse no corpo http, etc)

▸ suporte as novas features do asyncio do python 3.5

▸ low level API: implemente seu próprio HTTP Server

Page 13: Python async

PYTHON ASYNC

Obrigado!