Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Twisted - Python Barcelona - Enero 2009

1,459 views

Published on

Published in: Technology
  • Be the first to comment

Twisted - Python Barcelona - Enero 2009

  1. 1. Introducción a Twisted Introducción a Twisted Esteve Fernández <esteve@fluidinfo.com> Enero 2009 – Python Barcelona
  2. 2. Twisted  Escrito en Python  Framework de desarrollo (de red)  Asíncrono  Protocolos: HTTP, FTP, SSH, etc.  Alto rendimiento  Separación entre lógica, protocolos y transportes  Usuarios: Google, NASA, Flumotion, Fluidinfo y muchos más
  3. 3. Asíncrono  ¿Qué es?  No bloqueante  ¿Porqué?  Rendimiento  Seguridad  ¿Cómo?  Deferreds y patrón reactor
  4. 4. Asíncrono: ¿Cómo?  Deferreds  Multitarea basada en cooperación  Permiten encadenarse  Programación funcional  Otros nombres: futures, promises  Reactor  Planifica tareas  Conecta transportes  Demultiplexa entrada y hace de dispatcher
  5. 5. Deferreds  Promesas de un resultado futuro  Permiten encadenarse  Programación funcional  Otros nombres: futures, promises  Multitarea basada en cooperación
  6. 6. Deferreds: Ejemplo from twisted.internet import defer def problemaComplejo(x, y):     return defer.succeed(x + y) def cb(res):     print "Resultado: %d" % res problemaComplejo(1, 2).addCallback(cb)
  7. 7. Deferreds: Ejemplo (asíncrono) from twisted.internet import threads def problemaComplejo(x, y):     return x + y def cb(res):     print "Resultado: %d" % res threads.deferToThread(problemaComplejo, 1,  2).addCallback(cb) reactor.run()
  8. 8. Protocolos  Independientes del transporte  Separados de la lógica  Fáciles de escribir  Cliente y/o servidor
  9. 9. Protocolos: Ejemplo (servidor) from twisted.internet import protocol, reactor from twisted.protocols import basic class ReverseProtocol(basic.LineReceiver):     def lineReceived(self, line):         self.transport.write(line[::­1] + "rn")         self.transport.loseConnection() class ReverseFactory(protocol.ServerFactory):     protocol = ReverseProtocol reactor.listenTCP(12345, ReverseFactory()) reactor.run()
  10. 10. Protocolos: Ejemplo (cliente) from twisted.internet import protocol, reactor from twisted.protocols import basic class ReverseProtocol(basic.LineReceiver):     def connectionMade(self):         self.transport.write("Hello World!rn")     def lineReceived(self, line):         print "Recibido: %s" % line class ReverseFactory(protocol.ServerFactory):     protocol = ReverseProtocol reactor.connectTCP("localhost", 12345,  ReverseFactory()) reactor.run()
  11. 11. Factories  Crean instancias de los protocolos  Mantienen información compartida  Ejemplos:  Inicialización BD  Funciones comunes a todos los protocolos
  12. 12. Trial  Test de código con Deferreds: from twisted.trial import unittest from twisted.internet import reactor class FooTestCase(unittest.TestCase):   def testAlgo(self):     d = defer.Deferred()     d.addCallback(self.assertEquals,  "Ok")     reactor.callLater(d.callback, "Ok")     return d
  13. 13. Interfaces ZOPE  Composición vs herencia  Adaptadores  Decoradores (patrón) que adaptan un interfaz a otro  Registro de componentes (Twisted) from twisted.python import components components.registerAdaptor(Adaptador,  IOrigen, IDestino
  14. 14. Enlaces  Twisted  http://www.twistedmatrix.com  Zope  http://www.zope.org  Patrones  http://en.wikipedia.org/wiki/Reactor_pattern  http://en.wikipedia.org/wiki/Futures_and_promises  http://en.wikipedia.org/wiki/Decorator_pattern

×