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
- ¿Qué tan rápido crees que es necesario aprender angular?
- ¿Me puede dar información sobre la calidad del servicio de alojamiento web hostinger?
- ¿Cuál es la mejor empresa de desarrollo web en Australia?
- ¿Cuál es la mejor forma de producir banners HTML5?
- ¿Qué tan fácil es mantener una gran base de código React.js?
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