SlideShare une entreprise Scribd logo
1  sur  13
Télécharger pour lire hors ligne
PYTHON ASYNC
LEONARDO ROSSETTI
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
PYTHON ASYNC
ASSINCRONISMO
▸ Single-thread
▸ I/O concurrency
▸ Non-blocking sockets
▸ epoll/kqueue
▸ Event loop
▸ http://kegel.com/c10k.html
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
PYTHON ASYNC
ASSINCRONISMO - COMPARAÇÕES
Single Threaded
Tempodeexecução
Multi Threaded Async/Event Driven
Task 1
Task 2
Task 3
PYTHON ASYNC
ASYNC FRAMEWORKS
▸ Twisted
▸ Tornado
▸ Gevent
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
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
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 :(
PYTHON ASYNC
FRAMEWORKS - GEVENT (PYMONGO)
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
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
PYTHON ASYNC
Obrigado!

Contenu connexe

Tendances

Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMPLeandro Mendes
 
A Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampA Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampGeorge Guimarães
 
GDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosGDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosCaio Cutrim
 
Configurando um servidor
Configurando um servidorConfigurando um servidor
Configurando um servidorTiago
 
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017Renato Groff
 
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...Bruno Oliveira
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiiMasters
 
PaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaPaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaGetup Cloud
 
Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9Henrique Genovês
 

Tendances (20)

Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMP
 
Php WatchDog
Php WatchDogPhp WatchDog
Php WatchDog
 
A Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampA Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCamp
 
Seu site voando
Seu site voandoSeu site voando
Seu site voando
 
GDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosGDG NodeJS Sem Segredos
GDG NodeJS Sem Segredos
 
Cmder
CmderCmder
Cmder
 
Socket.io
Socket.ioSocket.io
Socket.io
 
Configurando um servidor
Configurando um servidorConfigurando um servidor
Configurando um servidor
 
Fabric
FabricFabric
Fabric
 
Gnome no FreeBSD
Gnome no FreeBSDGnome no FreeBSD
Gnome no FreeBSD
 
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
Quer ser um Full-Stack Developer? Essas são algumas "coisinhas" que você prec...
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika Heidi
 
PaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma públicaPaaS - OpenShift como plataforma pública
PaaS - OpenShift como plataforma pública
 
Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9Apresentação Multimídia - Unifesp - VP9
Apresentação Multimídia - Unifesp - VP9
 

Similaire à Python Async: Introdução à Programação Assíncrona com frameworks como Twisted, Tornado, Gevent e asyncio

Escalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShiftEscalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShiftGetup Cloud
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Getup Cloud
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introduçãoPablo Feijó
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com pythonUFPA
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Alta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxAlta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxThiago Paes
 
O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017Renato Groff
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoArtur Felipe Sousa
 
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e awaitMSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e awaitRogério Moraes de Carvalho
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebIsrael Messias
 
ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016Renato Groff
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!magnunleno
 
Programação Assíncrona com C# 5
Programação Assíncrona com C# 5Programação Assíncrona com C# 5
Programação Assíncrona com C# 5iMasters
 
Programação assíncrona com C# 5
Programação assíncrona com C# 5Programação assíncrona com C# 5
Programação assíncrona com C# 5Thiago Coelho
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 

Similaire à Python Async: Introdução à Programação Assíncrona com frameworks como Twisted, Tornado, Gevent e asyncio (20)

Escalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShiftEscalando aplicação Python usando Getup OpenShift
Escalando aplicação Python usando Getup OpenShift
 
Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014Semana Acadêmica ICET - Feevale - 12/04/2014
Semana Acadêmica ICET - Feevale - 12/04/2014
 
Node.js, Uma breve introdução
Node.js, Uma breve introduçãoNode.js, Uma breve introdução
Node.js, Uma breve introdução
 
Plack
PlackPlack
Plack
 
Python e Golang - Parte 2
Python e Golang - Parte 2Python e Golang - Parte 2
Python e Golang - Parte 2
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com python
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Alta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxAlta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - Nginx
 
O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017
 
Django deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produçãoDjango deploy - Como servir aplicações Django em produção
Django deploy - Como servir aplicações Django em produção
 
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e awaitMSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
MSDN Webcast: Task-based Asynchronous Pattern (TAP), async e await
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente Web
 
Deploy Rails
Deploy RailsDeploy Rails
Deploy Rails
 
ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016ASP.NET Core - iMasters - Março/2016
ASP.NET Core - iMasters - Março/2016
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!
 
Programação Assíncrona com C# 5
Programação Assíncrona com C# 5Programação Assíncrona com C# 5
Programação Assíncrona com C# 5
 
Programação assíncrona com C# 5
Programação assíncrona com C# 5Programação assíncrona com C# 5
Programação assíncrona com C# 5
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 

Python Async: Introdução à Programação Assíncrona com frameworks como Twisted, Tornado, Gevent e asyncio

  • 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
  • 3. PYTHON ASYNC ASSINCRONISMO ▸ Single-thread ▸ I/O concurrency ▸ Non-blocking sockets ▸ epoll/kqueue ▸ Event loop ▸ http://kegel.com/c10k.html
  • 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
  • 6. PYTHON ASYNC ASYNC FRAMEWORKS ▸ Twisted ▸ Tornado ▸ Gevent
  • 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 :(
  • 10. PYTHON ASYNC FRAMEWORKS - GEVENT (PYMONGO)
  • 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