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