何时以及如何使用龙卷风?什么时候没用?

时间:2010-11-18 08:29:04

标签: python asynchronous nonblocking tornado

好的,Tornado非阻塞且非常快,它可以轻松处理很多常备请求。

但我想这不是一个银弹,如果我们盲目地运行基于Django或任何其他Tornado的网站,它将不会给任何性能提升。

我找不到对此的全面解释,所以我在这里问:

  • 什么时候应该使用Tornado?
  • 什么时候没用?
  • 使用时,应该考虑什么?
  • 如何使用Tornado创建效率低下的网站?
  • 有一个服务器和一个webframework。 我们什么时候应该使用框架?什么时候可以用其他框架替换它?

2 个答案:

答案 0 :(得分:43)

  

有一个服务器和一个webframework。我们什么时候应该使用框架?何时可​​以用其他框架替换它?

这种区别有点模糊。只有当您提供静态页面时,才会使用像lighthttpd这样的快速服务器。另外,大多数服务器提供了不同的框架复杂性来开发Web应用程序。 Tornado是一个很好的Web框架。 Twisted功能更强大,被认为是一个很好的网络框架。它支持许多协议。

Tornado和Twisted是支持非阻塞,异步Web /网络应用程序开发的框架。

  

什么时候应该使用龙卷风?   什么时候没用?   使用时,应该考虑什么?

就其本质而言,异步/非阻塞I / O在I / O密集且无计算密集时效果很好。大多数Web /网络应用程序都适合此模型。如果您的应用程序需要完成某些计算密集型任务,则必须将其委派给可以更好地处理它的其他服务。虽然Tornado / Twisted可以完成Web服务器的工作,但可以响应Web请求。

  

我们怎样才能使用Tornado制作效率低下的网站?

  1. 做任何计算密集型任务
  2. 介绍阻止操作
  3.   

    但我想这不是一个银弹,如果我们盲目地运行基于Django或任何其他Tornado的网站,它将不会给任何性能提升。

    性能通常是完整Web应用程序体系结构的特征。如果应用程序设计不正确,您可以降低大多数Web框架的性能。考虑缓存,负载平衡等。

    Tornado和Twisted提供了合理的性能,非常适合构建性能非常高的Web应用程序。您可以查看扭曲和龙卷风的推荐,看看它们的功能。

答案 1 :(得分:6)

我很抱歉回答了一个老问题,但我遇到了这个问题,并想知道为什么它没有更多答案。回答Bart J的问题:

  

我想在Tornado应用程序中解析RSS提要。你会认为计算密集吗?

那取决于你正在做什么样的解析以及在什么硬件上:)长时间是很长一段时间,所以如果你的应用程序需要超过半秒响应,它看起来似乎很迟钝 - 描述你的应用

快速系统的关键是很棒的架构,而不是像你正在使用哪个框架(Twisted,Tornado,Apache + PHP)那样具体。 Tornado有一种异步处理风格,在我看来,这真的是很多东西。 Node.js,Twisted和Yaws是其他异步Web服务器的例子,由于采用了轻量级方法和异步处理方式,因此可以很好地扩展。

所以:

  

什么时候应该使用龙卷风?

     

什么时候没用?

Tornado适用于处理大量连接,因为它可以响应传入的客户端,调度请求处理程序,并且在结果回调被推送到事件队列之前不要考虑该客户端。因此,当您想要在处理大量请求时很好地扩展时,应该使用Tornado。 异步处理有助于功能解耦和无共享数据访问。对于像REST或其他Service Oriented Architecture这样的无状态设计,这种情况非常好。您也不必处理具有固有开销的产生线程或进程,并且可以节省一些锁定/ IPC问题。

另一方面,如果您的后端和/或数据存储需要很长时间来处理请求,那么Tornado不会产生太大的影响。它特别有助于并发设计和Web服务。并发架构使您可以更轻松地扩展设计并保持较低的耦合。这至少是我对龙卷风的体验。