当对root的请求到来时,Django会做什么?

时间:2015-08-10 09:08:27

标签: python django

我正在编写一个django网络应用程序。我不明白它是如何同时工作的。基本上,会发生的是我有一个页面需要10秒加载(由于执行了很多python计算),另一个页面需要大约1秒加载,因为执行的python代码较少并立即返回索引.html页面。 这是我在路由中提供的链接。

本地主机:3000 / 10secondpage

本地主机:3000 / 1secondpage

我在浏览器上执行此操作: 打开第一个浏览器到localhost:3000 / 10secondpage,然后立即打开第二个浏览器到localhost:3000 / 1secondpage

由于我只在带有1个终端的localhost上运行它,这是我预期的行为。

预期行为: python代码执行第一个浏览器的请求,需要10秒才能完成,完成后,它立即启动第二个浏览器的请求,大约需要1秒钟才能完成。因此,第二个浏览器需要等待大约11秒,因为它需要等待第一个浏览器的请求首先完成。

实际行为: 然而,实际行为是第二​​个浏览器首先完成了它的请求,尽管在第一个浏览器之后执行。这表明django已经带来了一些内置的进程/线程产生。

有人可以解释为什么会发生实际行为?

1 个答案:

答案 0 :(得分:2)

简单,它的线程。

在您能够执行请求之前,Web请求不依赖于能够完成的其他请求,如果确实如此,那么将更新发布到Facebook将需要数小时/数月/年才能使您的帖子实际生效

Django也不例外。为了处理页面可以一次接收的任意数量的请求,它必须单独和异步地处理它们。当然,随着负载共享和类似的引入,这可能会变得非常复杂,但它归结为相同的答案。

您可以查看Handlers source code,详细了解django对此做了什么

注意:我没有尝试过此操作,但为了观察您的预期输出,您可以使用--nothreading标记运行runserver

 manage.py runserver --nothreading