TORNADO3.0por dentro das novidadesGOTuesday, May 28, 13
quatix.com.br MARCELNICOLAY.COMO que é?TornadoUm framework web e uma biblioteca de rede assíncrona, originalmentedesenvolv...
quatix.com.br MARCELNICOLAY.COMO que é?TornadoUm framework web e uma biblioteca de rede assíncrona, originalmentedesenvolv...
quatix.com.br MARCELNICOLAY.COMO que é?TornadoUm framework web e uma biblioteca de rede assíncrona, originalmentedesenvolv...
Para que serve?QUANDOUSARquatix.com.br MARCELNICOLAY.COM @marcelnicolayTuesday, May 28, 13
Para que serve?QUANDOUSARquatix.com.br MARCELNICOLAY.COM @marcelnicolay• muito rápido• economiza recursos• non-blocking I/...
•lida bem com muitasconexões abertassimultâneamente• fácil gerência de contexto• suporte a websocketsmuito indicadoTEMPO R...
•lida bem com muitasconexões abertassimultâneamente• fácil gerência de contexto• suporte a websocketsmuito indicadoTEMPO R...
•lida bem com muitasconexões abertassimultâneamente• fácil gerência de contexto• suporte a websocketsmuito indicadoTEMPO R...
eventdrivenprogramação orientada a eventosGOTuesday, May 28, 13
O que é?eventdrivenprogrammingquatix.com.br MARCELNICOLAY.COMÉ um paradigma de programação onde o fluxo do programa é deter...
Problemaseventdrivenprogrammingquatix.com.br MARCELNICOLAY.COMdíficil para nossa cabeçaum simples erro pode f*der tudocódi...
quatix.com.br MARCELNICOLAY.COMO que é ?callbackpassingstyle@marcelnicolaydef start(foo):# do stuff with foo and when donw...
quatix.com.br MARCELNICOLAY.COMMelhorando um pouco!callbackpassingstyle@marcelnicolayclass AsyncHandler(RequestHandler):@a...
quatix.com.br MARCELNICOLAY.COMMelhorando um pouco!callbackpassingstyle@marcelnicolayclass AsyncHandler(RequestHandler):@a...
O que é?concurrentfuturesquatix.com.br MARCELNICOLAY.COMUm módulo que provê uma interface de alto nível para execução de c...
O que é?concurrentfuturesquatix.com.br MARCELNICOLAY.COMUm módulo que provê uma interface de alto nível para execução de c...
O que é?concurrentfuturesquatix.com.br MARCELNICOLAY.COM @marcelnicolayfrom concurrent import futuresimport urllib.request...
Simplificando as coisastornadofuturesquatix.com.br MARCELNICOLAY.COMA maioria das funções assíncronas do tornado passam ago...
class GenAsyncHandler(RequestHandler):@asynchronous@gen.enginedef get(self):http_client = AsyncHTTPClient()response = yiel...
class GenAsyncHandler(RequestHandler):@asynchronous@gen.enginedef get(self):http_client = AsyncHTTPClient()response = yiel...
asynciosupportasynchronous I/O for python standard libraryGOTuesday, May 28, 13
O que é?asynciosupportquatix.com.br MARCELNICOLAY.COMUma proposta para oferecer suporte completo à asynchronous I/O no pyt...
O que é?asynciosupportquatix.com.br MARCELNICOLAY.COMUma proposta para oferecer suporte completo à asynchronous I/O no pyt...
Asynchronous I/O supportasyncframeworksquatix.com.br MARCELNICOLAY.COM @marcelnicolayTuesday, May 28, 13
Asynchronous I/O supportasyncframeworksquatix.com.br MARCELNICOLAY.COM @marcelnicolayTOrnadotwistedgeventcircuitsconcurren...
Asynchronous I/O supportinteroperabilidadequatix.com.br MARCELNICOLAY.COM @marcelnicolayTuesday, May 28, 13
Asynchronous I/O supporttornadoquatix.com.br MARCELNICOLAY.COM @marcelnicolayben darnellTuesday, May 28, 13
AdressRio de Janeiro, RJPhone(21) 7656-6952quatixquatix.com.brwebsitemarcelnicolay.comContactUsGet in touchfacebook.com/ma...
Upcoming SlideShare
Loading in …5
×

Tornado

560 views

Published on

Recentemente foi anunciada a versão 3.0 do Tornado, um framework web non-blocking escrito para lidar com milhares de conexões simultâneas. Umas das grandes mudanças é o suporte a "Futures", introduzida no python 3.2 para dar mais poder aos tradicionais callbacks. Iremos conhecer as principais funcionalidades do Tornado, ressaltando as novidades implementadas na última versão, e comentar sobre as novas tendências para a programação assíncrona no python.

Published in: Technology
  • Be the first to comment

Tornado

  1. 1. TORNADO3.0por dentro das novidadesGOTuesday, May 28, 13
  2. 2. quatix.com.br MARCELNICOLAY.COMO que é?TornadoUm framework web e uma biblioteca de rede assíncrona, originalmentedesenvolvida para o FriendFeed, atualmente na versão 3.0.1@marcelnicolayTuesday, May 28, 13
  3. 3. quatix.com.br MARCELNICOLAY.COMO que é?TornadoUm framework web e uma biblioteca de rede assíncrona, originalmentedesenvolvida para o FriendFeed, atualmente na versão 3.0.1non-blocking i/oevent drivenrápidoescalávelsimplesFLEXÍVELtestável@marcelnicolayTuesday, May 28, 13
  4. 4. quatix.com.br MARCELNICOLAY.COMO que é?TornadoUm framework web e uma biblioteca de rede assíncrona, originalmentedesenvolvida para o FriendFeed, atualmente na versão 3.0.1non-blocking i/oevent drivenrápidoescalávelsimplesFLEXÍVELtestávelimport tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.write("Hello, world")application = tornado.web.Application([(r"/", MainHandler),])if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()@marcelnicolayTuesday, May 28, 13
  5. 5. Para que serve?QUANDOUSARquatix.com.br MARCELNICOLAY.COM @marcelnicolayTuesday, May 28, 13
  6. 6. Para que serve?QUANDOUSARquatix.com.br MARCELNICOLAY.COM @marcelnicolay• muito rápido• economiza recursos• non-blocking I/Omuito indicadoALTA PERFORMANCETuesday, May 28, 13
  7. 7. •lida bem com muitasconexões abertassimultâneamente• fácil gerência de contexto• suporte a websocketsmuito indicadoTEMPO REALPara que serve?QUANDOUSARquatix.com.br MARCELNICOLAY.COM @marcelnicolay• muito rápido• economiza recursos• non-blocking I/Omuito indicadoALTA PERFORMANCETuesday, May 28, 13
  8. 8. •lida bem com muitasconexões abertassimultâneamente• fácil gerência de contexto• suporte a websocketsmuito indicadoTEMPO REAL• bem simples de usar• template• internacionalização• user authentication• crsf protectionindicadosmall appsPara que serve?QUANDOUSARquatix.com.br MARCELNICOLAY.COM @marcelnicolay• muito rápido• economiza recursos• non-blocking I/Omuito indicadoALTA PERFORMANCETuesday, May 28, 13
  9. 9. •lida bem com muitasconexões abertassimultâneamente• fácil gerência de contexto• suporte a websocketsmuito indicadoTEMPO REAL• bem simples de usar• template• internacionalização• user authentication• crsf protectionindicadosmall appsindicadoquando você quiserPara que serve?QUANDOUSARquatix.com.br MARCELNICOLAY.COM @marcelnicolay• legal e divertido• muito rápido• economiza recursos• non-blocking I/Omuito indicadoALTA PERFORMANCETuesday, May 28, 13
  10. 10. eventdrivenprogramação orientada a eventosGOTuesday, May 28, 13
  11. 11. O que é?eventdrivenprogrammingquatix.com.br MARCELNICOLAY.COMÉ um paradigma de programação onde o fluxo do programa é determinado poreventos. Também pode ser definido como uma técnica de arquitetura deaplicação onde a aplicação possui um loop principal divido em duas etapas: (1)selecionar o evento; (2) manipular o evento;@marcelnicolayTuesday, May 28, 13
  12. 12. Problemaseventdrivenprogrammingquatix.com.br MARCELNICOLAY.COMdíficil para nossa cabeçaum simples erro pode f*der tudocódigo orientado a eventos é maiscomplexocallbacks alinhados, como no javascriptmais lento@marcelnicolayTuesday, May 28, 13
  13. 13. quatix.com.br MARCELNICOLAY.COMO que é ?callbackpassingstyle@marcelnicolaydef start(foo):# do stuff with foo and when donw call the next functionstuff(callback=next_step, data=foo);def next_step(bar):# call more_stuff to parse barmore_stuff(callback=last_step, data=bar)def last_step(baz):# senf the responsesend_response(baz)#let our handler know we are donefinish()Tuesday, May 28, 13
  14. 14. quatix.com.br MARCELNICOLAY.COMMelhorando um pouco!callbackpassingstyle@marcelnicolayclass AsyncHandler(RequestHandler):@asynchronousdef get(self):http_client = AsyncHTTPClient()http_client.fetch("http://example.com",callback=self.on_fetch)def on_fetch(self, response):do_something_with_response(response)self.render("template.html")Tuesday, May 28, 13
  15. 15. quatix.com.br MARCELNICOLAY.COMMelhorando um pouco!callbackpassingstyle@marcelnicolayclass AsyncHandler(RequestHandler):@asynchronousdef get(self):http_client = AsyncHTTPClient()http_client.fetch("http://example.com",callback=self.on_fetch)def on_fetch(self, response):do_something_with_response(response)self.render("template.html")class GenAsyncHandler(RequestHandler):@asynchronous@gen.enginedef get(self):http_client = AsyncHTTPClient()response = yield gen.Task(http_client.fetch,"http://example.com")do_something_with_response(response)self.render("template.html")Tuesday, May 28, 13
  16. 16. O que é?concurrentfuturesquatix.com.br MARCELNICOLAY.COMUm módulo que provê uma interface de alto nível para execução de chamadasassíncronas.@marcelnicolayTuesday, May 28, 13
  17. 17. O que é?concurrentfuturesquatix.com.br MARCELNICOLAY.COMUm módulo que provê uma interface de alto nível para execução de chamadasassíncronas.@marcelnicolayPEP 3148futures, executando computaçãoassíncronamente.python 3.2 +introduzida na versão 3.2, portado para as versõesanteriores através do módulo “futures”Executor objectsresponsável por executar as chamadasassíncronamente em threads e processosFUTURE OBJECTsencapsula a execução assíncrona de umachamada permitindo a manipulação através dosmétodos: cancel, running, result,add_done_callback, exception, etc..Tuesday, May 28, 13
  18. 18. O que é?concurrentfuturesquatix.com.br MARCELNICOLAY.COM @marcelnicolayfrom concurrent import futuresimport urllib.requestURLS = [http://www.foxnews.com/,http://www.cnn.com/,http://europe.wsj.com/,http://www.bbc.co.uk/,http://some-made-up-domain.com/]def load_url(url, timeout):return urllib.request.urlopen(url, timeout=timeout).read()def main():with futures.ThreadPoolExecutor(max_workers=5) as executor:future_to_url = dict((executor.submit(load_url, url, 60), url)for url in URLS)for future in futures.as_completed(future_to_url):url = future_to_url[future]try:print(%r page is %d bytes % (url, len(future.result())))except Exception as e:print(%r generated an exception: %s % (url, e))Tuesday, May 28, 13
  19. 19. Simplificando as coisastornadofuturesquatix.com.br MARCELNICOLAY.COMA maioria das funções assíncronas do tornado passam agora a retornar umaFuture; mandando um yield neste objeto o resultado é retornado.@marcelnicolayclass AsyncHandlerFuture(RequestHandler):@asynchronousdef get(self):http_client = AsyncHTTPClient()future = http_client.fetch("http://example.com")future.add_done_callback(self.on_fetch)def on_fetch(self, future):response = future.result()do_something_with_response(response)self.render("template.html")Tuesday, May 28, 13
  20. 20. class GenAsyncHandler(RequestHandler):@asynchronous@gen.enginedef get(self):http_client = AsyncHTTPClient()response = yield gen.Task(http_client.fetch,"http://example.com")do_something_with_response(response)self.render("template.html")quatix.com.br MARCELNICOLAY.COMNovidade na versao 3.0callbackpassingstyle@marcelnicolayTuesday, May 28, 13
  21. 21. class GenAsyncHandler(RequestHandler):@asynchronous@gen.enginedef get(self):http_client = AsyncHTTPClient()response = yield gen.Task(http_client.fetch,"http://example.com")do_something_with_response(response)self.render("template.html")quatix.com.br MARCELNICOLAY.COMNovidade na versao 3.0callbackpassingstyle@marcelnicolayclass BetterGenAsyncHandler(RequestHandler):@asynchronous@gen.coroutinedef get(self):http_client = AsyncHTTPClient()response = yield http_client.fetch("http://example.com")do_something_with_response(response)self.render("template.html")Tuesday, May 28, 13
  22. 22. asynciosupportasynchronous I/O for python standard libraryGOTuesday, May 28, 13
  23. 23. O que é?asynciosupportquatix.com.br MARCELNICOLAY.COMUma proposta para oferecer suporte completo à asynchronous I/O no python 3.@marcelnicolayTuesday, May 28, 13
  24. 24. O que é?asynciosupportquatix.com.br MARCELNICOLAY.COMUma proposta para oferecer suporte completo à asynchronous I/O no python 3.@marcelnicolayPEP 3156Asynchronous I/O support rebooted, DEZ/2012python 3.4 +Está sendo implementada e deve integrar apróxima versão do pythonevent loopLoop para gerenciar eventos de leitura e escritaem chamadas assíncronas, multiplaforma e de fácilintegração por frameworks como tornado etwisttedtransport and protocolAbstração de alto nível para manipulação dascamadas de transporte (TCP, SSL) e protocolo(HTTP, SMTP)coroutinesGeradores que seguem certas convenções. O seuuso não será obrigatório (você poderá usarcallbacks), mas seu uso é encorajado e terásuporte completo através de Futures / TasksTuesday, May 28, 13
  25. 25. Asynchronous I/O supportasyncframeworksquatix.com.br MARCELNICOLAY.COM @marcelnicolayTuesday, May 28, 13
  26. 26. Asynchronous I/O supportasyncframeworksquatix.com.br MARCELNICOLAY.COM @marcelnicolayTOrnadotwistedgeventcircuitsconcurrencedieseleventletcogenmultitaskchiralfriendlyflowweighlesspyftplibasyncoroasyncorepulsarTuesday, May 28, 13
  27. 27. Asynchronous I/O supportinteroperabilidadequatix.com.br MARCELNICOLAY.COM @marcelnicolayTuesday, May 28, 13
  28. 28. Asynchronous I/O supporttornadoquatix.com.br MARCELNICOLAY.COM @marcelnicolayben darnellTuesday, May 28, 13
  29. 29. AdressRio de Janeiro, RJPhone(21) 7656-6952quatixquatix.com.brwebsitemarcelnicolay.comContactUsGet in touchfacebook.com/marcelnicolaytwitter.com/marcelnicolayquatix.com.br MARCELNICOLAY.COM @marcelnicolayTuesday, May 28, 13

×