龙卷风与阻塞代码
我正在尝试放弃CherryPy来开发一个网络服务,现在我考虑的一个替代方案是Tornado。我的大部分请求在后台看起来像这样:
获取POST数据
查看我是否在缓存中有这个数据(也就是访问数据库)
如果没有,就需要向其他一些网络服务发起多个HTTP请求,这可能会花费几秒钟,具体取决于请求的数量
我听说不应该阻塞Tornado的主循环;我在想,如果上述代码都在一个RequestHandler
的post()
方法中执行,这是否意味着我在阻塞代码?如果是这样的话,使用Tornado来满足上述需求的合适方法是什么?
1 个回答
1
Tornado自带了一个异步的HTTP客户端(实际上是两个,记得没错的话),叫做AsyncHTTPClient。如果你需要发起额外的HTTP请求,就用这个客户端。
在查数据库的时候,也应该使用异步客户端,这样才能不阻塞tornado的ioloop或主循环。我知道有一些专门为tornado设计的数据库客户端,比如redis和mongodb。而mysql的库已经包含在tornado的发行版里了。