例如我在 views.py 里定义了 a 和 b 两个函数,内部都循环 sleep 十秒,通过 url 我可以同时访问 a 和 b ,但是如果我同时打开两个 a 页面,那么第二个访问要等第一个访问结束后才能开始。 这样的话,如果一个页面,有类似于 mysql 这种比较消耗 io 的连接,后面的访问者岂不是要等前面的访问者结束后才能打开页面? 大家的 django 也是这样的吗,还是设置某些参数可以实现同一个函数的多线程
1
jugelizi 2016-06-14 11:10:58 +08:00 1
你试试分别在两个浏览器里访问呢
而不是在一个浏览器打开两个标签 |
2
peter999 OP @jugelizi 谢谢,这是 chrome 浏览器的 bug ,我换了 ie ,同时打开两个 url 无此问题,又长见识了
|
3
tairan2006 2016-06-14 11:16:03 +08:00 1
python 世界不喜欢多线程…多进程才是王道啊。
|
4
peter999 OP @tairan2006 已确定是 chrome 浏览器的问题
|
5
mahone3297 2016-06-14 11:46:02 +08:00
这可能不算 bug ,可能算是 feature ,故意这样设计的。
你每次打开, active 的,应该只有一个 tab ,所以 chrome 觉得,只处理当前 active 的 tab ,其他后台 tab ,不执行或者缓慢执行,避免占用资源。我使用的时候,也有碰到 lz 说的情况。 |
6
xuwenmang 2016-06-14 12:04:23 +08:00
@tairan2006
linux 世界不喜欢多线程…多进程才是王道啊。 |
7
xxxcat 2016-06-14 13:31:01 +08:00
大概是 chrome 会复用网络连接的原因吧,我用 chrome 做测试偶尔发现对同一个网站,即使开多个 tab 也不一定会增加连接数, django 可能同一个连接会使用固定的线程处理,所以你的两个 a 请求实际上交给了同一个线程,就表现为串行了。
就像 5 楼说的,从节省资源提高效率角度看, chrome 这个特性应该不是 bug 而是 feature 。 |
8
tabris17 2016-06-14 14:10:59 +08:00 1
和 django 无关,你要看 wsgi 容器的实现是多线程还是多进程
django 框架本身是支持多线程的 |