美文网首页
Django 并发简单测试

Django 并发简单测试

作者: 自我实验室_村君 | 来源:发表于2019-10-16 16:37 被阅读0次

    新建一个 Django Project,随便写个页面,sleep 3s

    1. 浏览器打开两个页面,一个页面完成才会开始响应另一个页面,总用时 6s
    2. 用 ab 测试,ab -n 3 -c 3 http://127.0.0.1:8000/,总用时 3s

    疑问: 为什么用 ab 测试没有堵塞?
    原因: 在开发环境中,Django 默认用 runserver 方式启动,请求默认是支持多线程的,可以通过加上 --nothreading 参数,禁止多线程运行
    结果: 加 --nothreading 之后,ab 测试也是 6s

    疑问: 为什么浏览器堵塞了?
    原因: 浏览器有并发请求限制,Chrome 并发是 6。且 Chrome 访问相同的地址,会在一个加载完毕后再加载另一个

    把请求的并发数提高到 30,ab 报错,服务器有请求会崩,所以部署时千万不要用默认的服务器

    Benchmarking 127.0.0.1 (be patient)...Send request failed!
    apr_socket_recv: Connection reset by peer (54)
    Total of 2 requests completed
    

    疑问: ab 并发 30 时就会有请求崩掉,用多线程同时发送 50 个请求,但不会崩掉
    原因: 没找到

    改为用 Gunicorn 启动
    gunicorn c10k.wsgi:application -w 5
    并发量加大没有出现请求崩掉的情况

    Gunicorn 的作用,替换 Django 自带的默认服务器,更稳定

    通过 Gevent 提高并发

    1. pip install gevent
    2. gunicorn 启动加上参数: gunicorn c10k.wsgi:application -w 5 -k gevent
      ab -n 30 -c 30 url 结果:
      • before: 7s
      • after: 2s
      • 效果非常明显

    相关文章

      网友评论

          本文标题:Django 并发简单测试

          本文链接:https://www.haomeiwen.com/subject/wneumctx.html