为什么Django会阻止同一会话中的同时请求?

时间:2012-05-08 18:05:37

标签: django session concurrency

我尝试在我视图的第一行添加sleep(30)。之后,我在两个浏览器选项卡中打开了此页面。第一个选项卡在30秒后加载页面,第二个选项卡在60秒内加载。与此同时,我能够从另一台电脑打开页面就好了。所以看起来Django会阻止来自同一客户端的并发请求。

这对我的应用来说非常好。我想确保我的网站将来会以这种方式运作。但是我没有找到任何描述这种Django行为的文档或文章。所以我仍然不确定这是一个功能还是只是财富。有人可以解释这是如何以及为什么有效吗?

我真正需要的是在处理视图时阻止会话。当然我可以使用一些标志或数据库事务。但是我不想添加已经在Django中实现的功能。

我使用python 2.6.5,django 1.4,ubuntu服务器,nginx和uwsgi。尝试了postgresql和sqlite。

我的uwsgi设置:

<uwsgi>
    <pythonpath>/home/admin/app/src</pythonpath>
    <app mountpoint="/">
        <script>deploy.wsgi</script>
    </app>
    <workers>4</workers><!-- Not sure this is needed -->
    <processes>2</processes>
</uwsgi>

我对runserver命令也有同样的效果。

1 个答案:

答案 0 :(得分:2)

实际上Django不会阻止同时发出请求。

如果我使用相同的会话运行两个浏览器(例如chrome和firefox)(通过将sessionid cookie从第一个浏览器复制到第二个浏览器),则不会发生阻塞。所以,这是一个浏览器功能,无论如何它与Django无关。这意味着我仍需要自己添加一些阻止功能,以使代码安全。