Cómo usar la función asincrónica de Tornado Framework correctamente

Para implementar la función asincrónica en Tornado, primero debemos comprender qué significa asincrónico,

Según la definición
La programación asincrónica es un medio de programación paralela en el que una unidad de trabajo se ejecuta por separado del hilo principal de la aplicación y notifica al hilo que llama su finalización, falla o progreso.

El primer paso es averiguar si puede ir asíncrono o no, porque no todas las tareas pueden hacerse asíncronas.
Debe identificar cuál podría ser el código de bloqueo y cuál no es el código de bloqueo,
Considere el siguiente ejemplo

  tiempo de importación
 de tornado.ioloop import IOLoop


 def block_func ():
     imprimir 'Quora'
     time.sleep (1)
     imprimir 'Facebook'


 if __name__ == "__main__":
     # ¡Tenga en cuenta que el código se ejecuta de forma secuencial!
     IOLoop.instance (). Add_callback (block_func)
     IOLoop.instance (). Add_callback (block_func)
     IOLoop.instance (). Start ()

Aquí, time.sleep () es un código de bloqueo que impedirá la ejecución de la segunda función, por lo tanto, la salida del código será secuencial.
En lugar de usar time.sleep (), usaremos el equivalente asíncrono – add_timeout ()

  tiempo de importación
 de tornado.ioloop import IOLoop
 de tornado import gen


 @ gen.engine
 def f ():
     imprimir 'Quora'
     rendimiento gen.Task (IOLoop.instance (). add_timeout, time.time () + 1)
     imprimir 'Facebook'


 if __name__ == "__main__":
     # Tenga en cuenta que ahora el código se ejecuta "simultáneamente"
     IOLoop.instance (). Add_callback (f)
     IOLoop.instance (). Add_callback (f)
     IOLoop.instance (). Start () 

IOLoop programará la ejecución del resto de la función en 1 segundo, esto ejecutará las dos funciones simultáneamente.

Para crear una función asincrónicamente,
Cada función que tiene un argumento de “devolución de llamada” se puede usar con gen.engine.Task y usar solo bibliotecas asíncronas.
es decir, en lugar de urllib2.urlopen, use AsyncHTTPClient.fetch , use Motor para la operación DB

Para más información ,
-Programación asincrónica con Tornado Framework
-Programación asincrónica con Tornado