使用Tornado处理异步代码、测试和部署API
1. 问题引入
在之前实现的请求处理类中,不同的方法会调用 time.sleep 来模拟操作执行需要一定时间。但每个操作都会阻塞对其他传入HTTP请求的处理,为了解决这个问题,我们将创建一个新的API版本,利用异步执行,并体会Tornado的非阻塞特性带来的优势。这样,在一个请求改变蓝色LED亮度的同时,另一个请求可以改变白色LED的亮度,Tornado能在与无人机的I/O操作完成前就开始处理其他请求。
2. 利用异步装饰器重构代码
将代码拆分成不同方法的异步代码很难阅读和理解,尤其是涉及回调函数的情况。不过,Tornado提供了基于生成器的接口,让我们可以在请求处理程序中以单个生成器的形式编写异步代码。
推荐在Tornado中使用协程来编写异步代码。我们会重构现有代码,在 tornado.web.RequestHandler 子类中处理不同HTTP请求的方法上使用 @tornado.gen.coroutine 装饰器。
协程使用Python的 yield 关键字来暂停和恢复执行,使用协程能让代码像同步代码一样易于理解和维护。
我们会使用 concurrent.futures.ThreadPoolExecutor 类的实例来进行异步执行,同时使用 @tornado.concurrent.run_on_executor 装饰器让同步方法在执行器上异步运行。
超级会员免费看
订阅专栏 解锁全文
15

被折叠的 条评论
为什么被折叠?



