Leonardo Rossetti apresenta sobre assincronismo em Python. Ele discute como o assincronismo permite I/O concorrente e sockets não bloqueantes para melhorar o desempenho de aplicações backend. Ele também resume alguns frameworks assíncronos populares como Twisted, Tornado e Gevent, e como o asyncio foi introduzido no Python para padronizar assincronismo.
2. PYTHON ASYNC
WHOAMI
▸ Leonardo Rossetti
▸ @odranoel
▸ leonardo@goldark.com.br
▸ Python since 2007
▸ Fundador da Goldark (http://www.goldark.com.br)
▸ 100% python
▸ Plataforma e desenvolvimento de backend
▸ Arquitetura de microservices
4. 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
5. PYTHON ASYNC
ASSINCRONISMO - COMPARAÇÕES
Single Threaded
Tempodeexecução
Multi Threaded Async/Event Driven
Task 1
Task 2
Task 3
7. 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
8. 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
9. 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 :(
11. 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
12. 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