django 里 view 函数竟然是单线程的?

2016-06-14 11:08:28 +08:00
 peter999

例如我在 views.py 里定义了 a 和 b 两个函数,内部都循环 sleep 十秒,通过 url 我可以同时访问 a 和 b ,但是如果我同时打开两个 a 页面,那么第二个访问要等第一个访问结束后才能开始。 这样的话,如果一个页面,有类似于 mysql 这种比较消耗 io 的连接,后面的访问者岂不是要等前面的访问者结束后才能打开页面? 大家的 django 也是这样的吗,还是设置某些参数可以实现同一个函数的多线程

4073 次点击
所在节点    问与答
8 条回复
jugelizi
2016-06-14 11:10:58 +08:00
你试试分别在两个浏览器里访问呢
而不是在一个浏览器打开两个标签
peter999
2016-06-14 11:16:02 +08:00
@jugelizi 谢谢,这是 chrome 浏览器的 bug ,我换了 ie ,同时打开两个 url 无此问题,又长见识了
tairan2006
2016-06-14 11:16:03 +08:00
python 世界不喜欢多线程…多进程才是王道啊。
peter999
2016-06-14 11:16:29 +08:00
@tairan2006 已确定是 chrome 浏览器的问题
mahone3297
2016-06-14 11:46:02 +08:00
这可能不算 bug ,可能算是 feature ,故意这样设计的。
你每次打开, active 的,应该只有一个 tab ,所以 chrome 觉得,只处理当前 active 的 tab ,其他后台 tab ,不执行或者缓慢执行,避免占用资源。我使用的时候,也有碰到 lz 说的情况。
xuwenmang
2016-06-14 12:04:23 +08:00
@tairan2006
linux 世界不喜欢多线程…多进程才是王道啊。
xxxcat
2016-06-14 13:31:01 +08:00
大概是 chrome 会复用网络连接的原因吧,我用 chrome 做测试偶尔发现对同一个网站,即使开多个 tab 也不一定会增加连接数, django 可能同一个连接会使用固定的线程处理,所以你的两个 a 请求实际上交给了同一个线程,就表现为串行了。
就像 5 楼说的,从节省资源提高效率角度看, chrome 这个特性应该不是 bug 而是 feature 。
tabris17
2016-06-14 14:10:59 +08:00
和 django 无关,你要看 wsgi 容器的实现是多线程还是多进程

django 框架本身是支持多线程的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/285568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX