V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
peter999
V2EX  ›  问与答

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

  •  
  •   peter999 · 2016-06-14 11:08:28 +08:00 · 4041 次点击
    这是一个创建于 3077 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    django 框架本身是支持多线程的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   993 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 22:41 · PVG 06:41 · LAX 14:41 · JFK 17:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.