龙卷风与阻塞代码

3 投票
1 回答
770 浏览
提问于 2025-04-16 09:43

我正在尝试放弃CherryPy来开发一个网络服务,现在我考虑的一个替代方案是Tornado。我的大部分请求在后台看起来像这样:

  • 获取POST数据

  • 查看我是否在缓存中有这个数据(也就是访问数据库)

  • 如果没有,就需要向其他一些网络服务发起多个HTTP请求,这可能会花费几秒钟,具体取决于请求的数量

我听说不应该阻塞Tornado的主循环;我在想,如果上述代码都在一个RequestHandlerpost()方法中执行,这是否意味着我在阻塞代码?如果是这样的话,使用Tornado来满足上述需求的合适方法是什么?

1 个回答

1

Tornado自带了一个异步的HTTP客户端(实际上是两个,记得没错的话),叫做AsyncHTTPClient。如果你需要发起额外的HTTP请求,就用这个客户端。

在查数据库的时候,也应该使用异步客户端,这样才能不阻塞tornado的ioloop或主循环。我知道有一些专门为tornado设计的数据库客户端,比如redismongodb。而mysql的库已经包含在tornado的发行版里了。

撰写回答