Tornado开发(五)— 扩展

本文介绍了Tornado中协程异步处理的方式,包括使用@tornado.gen.coroutine和async/await的区别。通过示例展示了如何实现异步获取网页内容以及如何将阻塞函数转换为异步。文章指出,虽然异步编程可以提高效率,但在复杂业务场景下设计和调试较为困难,有时多线程执行也是一种选择。
摘要由CSDN通过智能技术生成

4. 协程异步/多线程处理

以协程方式(Coroutine)进行异步处理,是Tornado推荐的方式。Coroutine不采用回调函数方式,而用yield来挂起和恢复运行(现在又有新关键字了,说明python的Coroutine还没有稳定下来),协程编程风格看起来像同步,但又没有线程的切换,因此效率要高一些。

在Tornado中,现在有两种方式实现协程:一是函数前加@tornado.gen.coroutine修饰器,异步函数前加yield,这是一种较“老”的方式;二是函数采用async定义,异步函数前加await。async和await是python3.5引入的,目前是python内置方式,因此后者的运行效率比前者要高些。但Tornado官网上也说了后者的不足:对老版本的兼容不如前者;yield适用性上也比await广些,例如面对future list时。

    下面是以异步方式运行业务逻辑的三个页面示例。

import time
import tornado.ioloop
import tornado.web
import tornado.httpclient
import tornado.gen

class time_consuming_handler(tornado.web.RequestHandler):
	async def get(self):
		t1 =  time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
		result = await tornado.ioloop.IOLoop.current().run_in_executor(None, self.do_task,5)
		self.wri
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值