Tornado在单线程中运行时没有阻塞?

时间:2012-08-21 06:30:39

标签: python multithreading tornado nonblocking single-threaded

Tornado是非阻止网络服务器。

但是,所有操作都在一个线程中运行。 如果由单线程处理,它如何保持非阻塞?

如果有长时间操作,是否会阻止新来的请求?

从Tornado下载一个大文件是一个很长的阻止过程吗?

如果我的理解不准确,请帮助纠正我。

非常感谢

1 个答案:

答案 0 :(得分:1)

  

如果有长时间操作,是否会阻止新来的请求?

是。不,这取决于。

Tornado内部发生的任何事情都会阻塞。因此,如果您执行“time.sleep(10)”或执行计算密集型操作,它将会阻止。

Tornado(和Twisted,以及node.js)可以做得好的是来自其他服务(如亚马逊,Facebook,或子流程,或带有异步库的数据库)的请求数据,然后在等待的其他请求中提供服务回答。见http://www.tornadoweb.org/documentation/overview.html#non-blocking-asynchronous-requests

要做到这一点,你需要前面的服务器也是异步的(所以Nginx,而不是Apache)。