Ejemplos de análisis sintáctico Python Twisted marco Diferido Uso objeto

Diferido objeto para su uso en marco Twsited para devoluciones de llamada de manipulación, que para confiar en asíncrono Twisted es muy importante, entonces marco que Python Twisted a instancias determinación de los objetos en diferido
estructura del objeto Diferido
Diferido cadena de devolución de llamada por una serie de emparejado composición, cada uno de devolución de llamada (devoluciones de llamada) para incluir un proceso para exitosos y de devolución de llamada (errbacks) para el manejo de errores. Inicialmente, deffereds por dos cadenas de devolución de llamada vacías. Siempre se añadió en pares cuando se agrega una devolución de llamada a la misma. Cuando el resultado del procesamiento asíncrono de los retornos, difieren y comenzará en la orden cuando la devolución de llamada gatillo cadena agregó.
Quizás más fácil de explicar con un ejemplo, la primera mirada addCallback:

from twisted.internet.defer import Deferred
 
def myCallback(result):
  print result
 
d = Deferred()
d.addCallback(myCallback)
d.callback("Triggering callback.")

Ejecutarlo obtendrá los siguientes resultados:

Triggering callback.

El ejemplo crea un DEFFERED y utilizar su método addCallback para registrar una devolución de llamada para un tratamiento exitoso. d.callback comienza DEFFERED y llamadas de devolución de llamada cadena. parámetro de devolución de llamada será pasada en cada primera cadena de funciones de devolución de llamada recibe.
Hay addCallback, otro error de esa rama, me gustaría ser capaz de adivinar que addErrorback, la misma vistazo a un ejemplo:

from twisted.internet.defer import Deferred
 
def myErrback(failure):
  print failure
 
d = Deferred()
d.addErrback(myErrback)
d.errback(ValueError("Triggering errback."))

Ejecutarlo obtendrá los siguientes resultados:

[Failure instance: Traceback (failure with no frames): <type 'exceptions.ValueError'>: Triggering errback.]

Twisted error sería visto en el fracaso encapsulado.
Vale la pena señalar que la referencia se había registrado antes de la devolución de llamada siempre se empareja. Cuando se utiliza el método d.addCallback y d.addErrorback, parecemos acaba de agregar una devolución de llamada o una errback. De hecho, con el fin de completar la creación de esta cadena de devolución de llamada de nivel, estos métodos serán para la otra mitad registró un paso a través. Recuerde, la cadena de devolución de llamada siempre tienen la misma longitud. Si desea especificar una devolución de llamada esta devolución de llamada y errback respectivamente. métodos D.addCallbacks se pueden utilizar:

d = Deferred()
d.addCallbacks(myCallback, myErrback)
d.callback("Triggering callback.")

Bueno ... primero que llega aquí hoy.
ejemplo avanzado
entonces debería ser el punto más práctico, es decir, en el reactor. Echemos un vistazo a un ejemplo:

from twisted.internet import reactor, defer
 
class HeadlineRetriever(object):
  def processHeadline(self, headline):
    if len(headline) > 50:
      self.d.errback(Exception("The headline ``%s'' is too long!" % (headline,)))
    else:
      self.d.callback(headline)
 
  def _toHTML(self, result):
    return "<h1>%s</h1>" % (result,)
 
  def getHeadline(self, input):
    self.d = defer.Deferred()
    reactor.callLater(1, self.processHeadline, input)
    self.d.addCallback(self._toHTML)
    return self.d
 
def printData(result):
  print result
  reactor.stop()
 
def printError(failure):
  print failure
  reactor.stop()
 
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes us to the Moon!")
d.addCallbacks(printData, printError)
 
reactor.run()

Recibir un título de casos y procesos, si el título volverá error de tiempo largo, de lo contrario se convierte en HTML y la espalda.

El título dado por menos de 50 caracteres, se volvió a realizar el código anterior es como sigue:

<h1>Breaking News: Twisted Takes us to the Moon!</h1>

Vale la pena destacar, por encima de los usos del método callLater el reactor, que se pueden utilizar para los eventos programados para simular una solicitud asincrónica.

Si nos volvemos título muy larga, por ejemplo:

h = HeadlineRetriever()
d = h.getHeadline("1234567890"*6)
d.addCallbacks(printData, printError)

Ese resultado se puede cumplir

[Failure instance: Traceback (failure with no frames): <type 'exceptions.Exception'>: The headline ``123456789012345678901234567890123456789012345678901234567890'' is too long!]

Nos fijamos en el mapa para desencadenar el proceso: Aquí Insertar imagen Descripción
El punto clave de Deferreds

  1. Deferreds se activarán cuando se llama a su devolución de llamada o errback;
  2. Deferreds sólo puede activarse una vez! Si intenta disparar varias veces resultará en AlreadyCalledError anormal;
  3. Errback de devolución de llamada o serán pasados ​​etapa N Excepciones en una primera etapa N + errback 1;. Y si no errback, se produce no controlada de error. Si el N-ésimo errback etapa de devolución de llamada o no retorno o lanza objetos, si no excepción, que será procesada por una etapa subsiguiente N + 1 de la devolución de llamada;
  4. Resultados de devolución de llamada de devolución de llamada devuelto serán pasados ​​a la siguiente etapa, como primer parámetro;
  5. Si el objeto no es un error Fallo de entrada errback, automáticamente se llena una vez.
    Por último, recomiendo una reunión pitón buena reputación [ Haga clic para entrar ], hay una gran cantidad de veteranos habilidades de aprendizaje, la experiencia de aprendizaje

, Habilidades de la entrevista, experiencia de trabajo y otra acción, prepararon el mayor cuidado la información introductoria de base cero, información sobre proyectos reales, los programadores de todos los días

Python método para explicar la sincronización de la tecnología, para compartir algunas de las letras y la necesidad de prestar atención a los pequeños detalles

Publicado 10 artículos originales · ganado elogios 0 · Vistas 3948

Supongo que te gusta

Origin blog.csdn.net/haoxun11/article/details/104886885
Recomendado
Clasificación