Tornado是非阻止网络服务器。
但是,所有操作都在一个线程中运行。 如果由单线程处理,它如何保持非阻塞?
如果有长时间操作,是否会阻止新来的请求?
从Tornado下载一个大文件是一个很长的阻止过程吗?
如果我的理解不准确,请帮助纠正我。
非常感谢
答案 0 :(得分:1)
如果有长时间操作,是否会阻止新来的请求?
是。不,这取决于。
Tornado内部发生的任何事情都会阻塞。因此,如果您执行“time.sleep(10)”或执行计算密集型操作,它将会阻止。
Tornado(和Twisted,以及node.js)可以做得好的是来自其他服务(如亚马逊,Facebook,或子流程,或带有异步库的数据库)的请求数据,然后在等待的其他请求中提供服务回答。见http://www.tornadoweb.org/documentation/overview.html#non-blocking-asynchronous-requests
要做到这一点,你需要前面的服务器也是异步的(所以Nginx,而不是Apache)。