Mais do que um framework web bonitinho                                         marcelnicolay.com
sobre mimmarcelnicolay.comquatix.com.bracademiatech.com.br                      marcelnicolay.com
Tornado é um framework web non­blocking, escrito para lidar com milhares de conexõessimultâneamente.E que mais?   URL Spec...
ipr traoilomot ond.oopipr traowbmot ond.ecasMiHnlrtraowbRqetade)ls   anade(ond.e.eusHnlr:  dfgtsl)   e   e(ef:      sl.rt(...
mas é só isso? não...                 marcelnicolay.com
backgroundO que você sabe sobre:   Non­blocking I/O?   Callback pass style?                          marcelnicolay.com
non­blocking I/OÉ um forma de processamento de entrada/saída (input/output) que não bloqueia oprocesso, permitindo executa...
non­blocking I/OTypical flow of the synchronous blocking I/O model                                                     mar...
asynchronous I/OTypical flow of the asynchronous non­blocking I/O model                                                   ...
non­blocking I/OEverything in unix is a file descriptorincluindo:    sockets    connections                               ...
sockets operations        client       server                              marcelnicolay.com
synchronous accept                     marcelnicolay.com
asynchronous accept                      marcelnicolay.com
callback passing styledfsatfo:e  tr(o) #d sufwt foadwe dn cl tenx fnto   o tf ih o n hn ow al h et ucin sufclbc=etse,dt=o)...
IOLoopAn I/O event loop for non­blocking sockets.   core da camada de rede do tornado   rápido e fácil de usar   uma instâ...
IOLoopipr eromot rnipr fntosmot ucolipr scemot oktfo traoipr ilorm ond  mot oopdfhnl_oncincneto,ades:e  adecneto(oncin drs...
IOStreamUtility classes to write to and read from non­blocking files and sockets.   faz todo o "trabalho sujo" para você  ...
IOStream: a very simple HTTP clientfo traoipr ilorm ond  mot oopfo traoipr israrm ond  mot otemipr scemot oktdfsn_eus(:e  ...
tornado.stack_contextpermite preservar o estado atual para ser usado em um outro contexto de execução@otxlbcnetaaecneti.ot...
tornado.genNão curtiu o callback passing style?casAycade(eusHnlr:ls   snHnlrRqetade)  @snhoos   aycrnu  dfgtsl)   e   e(ef...
tornado.genExiste uma forma mais pythonica de fazer isso...casGnsnHnlrRqetade)ls   eAycade(eusHnlr:  @snhoos   aycrnu  @e....
timersexecutar um callback na próxima iteração, ou após algum intervalo   ioloop.add_timeout(deadline, callback)   ioloop....
tornado.httpclient.AsyncHTTPClientAn non­blocking HTTP client.fo traoipr ilo,htcinrm ond mot oop  tpletdfhnl_eus(epne:e  a...
tornado.platform.twistedThis module contains a Twisted reactor build on the Tornado IOLoopipr traopafr.wsemot ond.ltomtitd...
tornado.websocketWebSockets allow for bidirectional communication between the browser and server.casEhWboktwboktWboktade)l...
tornado.netutil.TCPServerA non­blocking, single­threaded TCP server.fo traoipr ilorm ond mot oopfo traoipr nttlrm ond mot ...
Mais do que um framework bonitinho                                     marcelnicolay.com
referências http://en.wikipedia.org/wiki/Asynchronous_I/O http://www.kegel.com/dkftpbench/nonblocking.html http://www.kern...
Upcoming SlideShare
Loading in …5
×

Tornado mais do que um framework bonitinho

3,243 views

Published on

Palestra feita no Mutirão PyCursos 2013, ela tem como objetivo introduzir os aspectos do non-blocking I/O aplicados ao desenvolvimento web e mostrar como o Tornado pode lhe ajudar a construir soluções mais completas.

O Tornado é um framework web non-blocking escrito para lidar com milhares de conexões simultâneas. Iremos conhecer as camadas mais baixas do framework (ioloop, iostream, stack_context, gen, timers, ...) entender como elas funcionam e como podemos utilizá-las.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,243
On SlideShare
0
From Embeds
0
Number of Embeds
1,890
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Tornado mais do que um framework bonitinho

  1. 1. Mais do que um framework web bonitinho marcelnicolay.com
  2. 2. sobre mimmarcelnicolay.comquatix.com.bracademiatech.com.br marcelnicolay.com
  3. 3. Tornado é um framework web non­blocking, escrito para lidar com milhares de conexõessimultâneamente.E que mais? URL Spec Template Locale Request Handler HTTP Server marcelnicolay.com
  4. 4. ipr traoilomot ond.oopipr traowbmot ond.ecasMiHnlrtraowbRqetade)ls anade(ond.e.eusHnlr: dfgtsl) e e(ef: sl.rt(Hlo wrd) efwie"el, ol"i _nm_ = "_an_: f _ae_ = _mi_" apiain=traowbApiain[ plcto ond.e.plcto( ("" MiHnlr, r/, anade) ]) apiainlse(88 plcto.itn88) traoilo.Oopisac(.tr( ond.oopILo.ntne)sat) marcelnicolay.com
  5. 5. mas é só isso? não... marcelnicolay.com
  6. 6. backgroundO que você sabe sobre: Non­blocking I/O? Callback pass style? marcelnicolay.com
  7. 7. non­blocking I/OÉ um forma de processamento de entrada/saída (input/output) que não bloqueia oprocesso, permitindo executar outras coisas em paralelo.Operações de entrada e saída, como leitura e escrita, podem ser extremamente lentas emcomparação com o processamento.Por exemplo, durante uma operação de disco que leve 10 milisegundos para ser realizada,um processador de 1 gigahertz pode processar até 10milhões de instruções. marcelnicolay.com
  8. 8. non­blocking I/OTypical flow of the synchronous blocking I/O model marcelnicolay.com
  9. 9. asynchronous I/OTypical flow of the asynchronous non­blocking I/O model marcelnicolay.com
  10. 10. non­blocking I/OEverything in unix is a file descriptorincluindo: sockets connections marcelnicolay.com
  11. 11. sockets operations client server marcelnicolay.com
  12. 12. synchronous accept marcelnicolay.com
  13. 13. asynchronous accept marcelnicolay.com
  14. 14. callback passing styledfsatfo:e tr(o) #d sufwt foadwe dn cl tenx fnto o tf ih o n hn ow al h et ucin sufclbc=etse,dt=o) tf(alaknx_tp aafo;dfnx_tpbr:e etse(a) #cl mr_tf t prebr al oesuf o as a mr_tf(alakls_tp dt=a) oesufclbc=atse, aabrdfls_tpbz:e atse(a) #sn tersos ef h epne sn_epnebz edrsos(a) #e orhnlrko w aedn lt u ade nw e r oe fns( iih) marcelnicolay.com
  15. 15. IOLoopAn I/O event loop for non­blocking sockets. core da camada de rede do tornado rápido e fácil de usar uma instância por processo cross­plataforma código aberto client libraries & server applications marcelnicolay.com
  16. 16. IOLoopipr eromot rnipr fntosmot ucolipr scemot oktfo traoipr ilorm ond mot oopdfhnl_oncincneto,ades:e adecneto(oncin drs) pit"e cneto.. rn nw oncin."dfcneto_ed(ok f,eet)e oncinraysc, d vns: wieTu: hl re ty r: cneto,ades=sc.cet) oncin drs okacp( ecp sce.ro,e xet okterr : i eag[]nti (rn.WUDLC,eroEGI) f .rs0 o n eroEOLBOK rn.AAN: rie as rtr eun cneto.ebokn() oncinstlcig0 hnl_oncincneto,ades adecneto(oncin drs)sc =sce.oktsce.FIE,sce.OKSRA,0ok oktsce(oktA_NT oktSC_TEM )sc.escotsce.O_OKT sce.ORUEDR 1okstokp(oktSLSCE, oktS_ESAD, )sc.ebokn()okstlcig0sc.id(" 88)okbn(", 88)sc.itn18oklse(2)i_op=ilo.Oopisac(olo oopILo.ntne)clbc =fntosprilcneto_ed,sc)alak ucol.ata(oncinray oki_opadhnlrsc.ieo) clbc,i_opRA)olo.d_ade(okfln(, alak olo.EDi_opsat)olo.tr( marcelnicolay.com
  17. 17. IOStreamUtility classes to write to and read from non­blocking files and sockets. faz todo o "trabalho sujo" para você também usado em client & server marcelnicolay.com
  18. 18. IOStream: a very simple HTTP clientfo traoipr ilorm ond mot oopfo traoipr israrm ond mot otemipr scemot oktdfsn_eus(:e edrqet) sra.rt(GT/HT/.Hs:finfe.o" temwie"E TP10rnot rededcmrnrn) sra.edutl"rnrn,o_edr) temra_ni(" nhaesdfo_edr(aa:e nhaesdt) haes={ edr } frln i dt.pi(": o ie n aaslt"rn) prs=ln.pi(:) at ieslt"" i lnprs = 2 f e(at) = : haesprs0.ti(]=prs1.ti( edr[at[]srp) at[]srp) sra.edbtsithaes"otn-egh],o_oy temra_ye(n(edr[CnetLnt") nbd)dfo_oydt)e nbd(aa: pitdt rn aa sra.ls( temcoe) ilo.Oopisac(.tp) oopILo.ntne)so(s=sce.oktsce.FIE,sce.OKSRA,0 oktsce(oktA_NT oktSC_TEM )sra =isra.Otemstem otemISra()sra.onc("rededcm,8) sn_eus)temcnet(finfe.o" 0, edrqetilo.Oopisac(.tr(oopILo.ntne)sat)
  19. 19. tornado.stack_contextpermite preservar o estado atual para ser usado em um outro contexto de execução@otxlbcnetaaecneti.otxmngrdfdeo_ro(:e i_nerr) ty r: yed il ecp Ecpin xet xeto: lgigerr"xeto i aycrnu oeain,x_noTu) ogn.ro(ecpin n snhoos prto"ecif=re ssei() y.xt1wt Sakotx(i_nerr:ih tcCnetdeo_ro) #Ayecpintrw hr *ri clbc adisdsnet* n xeto hon ee o n alak n t eedns #wl cuetepoest ei isedo sinn edesy il as h rcs o xt nta f pnig nlsl #i teilo. n h oop ht_letfthul clbc) tpcin.ec(r, alakilo.tr(oopsat) marcelnicolay.com
  20. 20. tornado.genNão curtiu o callback passing style?casAycade(eusHnlr:ls snHnlrRqetade) @snhoos aycrnu dfgtsl) e e(ef: ht_let=AycTPlet) tpcin snHTCin( ht_letfth"tp/eapecm, tpcin.ec(ht:/xml.o" clbc=efo_ec) alaksl.nfth dfo_ec(ef rsos) e nfthsl, epne: d_oehn_ihrsos(epne osmtigwt_epnersos) sl.edr"epaehm" efrne(tmlt.tl) marcelnicolay.com
  21. 21. tornado.genExiste uma forma mais pythonica de fazer isso...casGnsnHnlrRqetade)ls eAycade(eusHnlr: @snhoos aycrnu @e.nie gnegn dfgtsl) e e(ef: ht_let=AycTPlet) tpcin snHTCin( rsos =yedgnTs(tpcin.ec, epne il e.akht_letfth "tp/eapecm) ht:/xml.o" d_oehn_ihrsos(epne osmtigwt_epnersos) sl.edr"epaehm" efrne(tmlt.tl) marcelnicolay.com
  22. 22. timersexecutar um callback na próxima iteração, ou após algum intervalo ioloop.add_timeout(deadline, callback) ioloop.remove_timeout(timeout) ioloop.add_callback(callback) marcelnicolay.com
  23. 23. tornado.httpclient.AsyncHTTPClientAn non­blocking HTTP client.fo traoipr ilo,htcinrm ond mot oop tpletdfhnl_eus(epne:e aderqetrsos) i rsos.ro: f epneerr pit"ro:,rsos.ro rn Err" epneerr es: le pitrsos.oy rn epnebd ilo.Oopisac(.tp) oopILo.ntne)so(ht_let=htcin.snHTCin(tpcin tpletAycTPlet)ht_letfth"tp/wwgol.o/,hnl_eus)tpcin.ec(ht:/w.ogecm" aderqetilo.Oopisac(.tr(oopILo.ntne)sat)
  24. 24. tornado.platform.twistedThis module contains a Twisted reactor build on the Tornado IOLoopipr traopafr.wsemot ond.ltomtitdtraopafr.wse.ntl(ond.ltomtitdisal)fo titditre ipr ratrrm wse.nent mot eco marcelnicolay.com
  25. 25. tornado.websocketWebSockets allow for bidirectional communication between the browser and server.casEhWboktwboktWboktade)ls coeSce(esce.eSceHnlr: dfoe(ef: e pnsl) pit"eSce oee" rn Wbokt pnd dfo_esg(ef msae: e nmsaesl, esg) sl.rt_esg("o si:"+msae efwiemsaeuYu ad esg) dfo_ls(ef: e ncoesl) pit"eSce coe" rn Wbokt lsd marcelnicolay.com
  26. 26. tornado.netutil.TCPServerA non­blocking, single­threaded TCP server.fo traoipr ilorm ond mot oopfo traoipr nttlrm ond mot euicasEhSre(eui.CSre)ls coevrnttlTPevr: dfhnl_temsl,sra,ades: e adesra(ef tem drs) sl.sra =sra ef_tem tem sl.ra_ie) ef_edln( df_edln(ef: e ra_iesl) sl.sra.edutln,sl.hnl_ed ef_temra_ni( ef_adera) df_adera(ef dt_n: e hnl_edsl, aai) sl.sra.rt(Yusn:%%dt_n ef_temwieo et s aai) sl.ra_ie) ef_edln(i _nm_ = _an_: f _ae_ = _mi_ sre =EhSre( evr coevr) sre.itn20) evrlse(07 ilo.Oopisac(.tr() oopILo.ntne)sat) marcelnicolay.com
  27. 27. Mais do que um framework bonitinho marcelnicolay.com
  28. 28. referências http://en.wikipedia.org/wiki/Asynchronous_I/O http://www.kegel.com/dkftpbench/nonblocking.html http://www.kernel.org/doc/man­pages/online/pages/man4/epoll.4.html http://scotdoyle.com/python­epoll­howto.html http://docs.python.org/2/library/select.html http://www.tornadoweb.org/documentation/index.html http://dabeaz.com/coroutines/Coroutines.pdf marcelnicolay.com

×