Coder Social home page Coder Social logo

pressure_test_comparison's Introduction

压测对比

环境搭建

Python >= 3.8

python3 -m venv venv
source venv/bin/activate
pip install -r requirements-dev.txt -i https://pypi.douban.com/simple

1. Flask 阻塞和非阻塞

# Flask 压测
python demo.py
ab -n 500 -c 500 http://localhost:5000/

# 1. 纯 Flask 是非阻塞的,可实现并发
python pure_flask_non_blocking.py

# 2. gevent 是阻塞的
python wsgi_flask_blocking.py

# 3. gevent 程序中增加 monkey,实现非阻塞。(备注:monkey将标准socket模块中的函数与类替换为对用的功能项,这样即使不清楚gevent结构,也可从多个greenlet运行环境中受益.)
python wsgi_flask_non_blocking.py

2. gunicorn启动压测

# 使用gunicorn启动,这里启动4个进程,gunicorn worker_class default is `-k sync`
gunicorn -w 4 -b 0.0.0.0:8000 demo:app

ab -n 500 -c 500 http://localhost:8000/
wrk -t12 -c400 -d30s --latency http://localhost:8000/

3. gunicorn 几种 worker 性能测试比较

gunicorn -w 4 demo:app --worker-class sync
gunicorn -w 4 --thread=2 --worker-class=gthread demo:app # 最大的并发请求就是worker * 线程, 也就是8,在有很多请求时候,线程才会开启
gunicorn -w 4 demo:app --worker-class gevent
gunicorn -w 4 --worker-class=gevent --worker-connections=1000 demo:app # work-connections 是对gevent worker类的特殊设置,最大的并发请求数 是4000(4个worker * 1000连接/worker)
gunicorn -w 4 demo:app --worker-class tornado
gunicorn -w 4 demo:app --worker-class eventlet

4. Flask 和 Django 的性能

# 1. flask
python gevent_flask.py
python tornado_flask.py
gunicorn -b 127.0.0.1:8000 pure_flask:app -k sync
gunicorn -b 127.0.0.1:8000 pure_flask:app -k eventlet
gunicorn -b 127.0.0.1:8000 pure_flask:app -k tornado
gunicorn -b 127.0.0.1:8000 pure_flask:app -k gevent

# 2. django
python gevent_django.py
python tornado_django.py
gunicorn -b 127.0.0.1:8000 pure_django:app -k sync
gunicorn -b 127.0.0.1:8000 pure_django:app -k eventlet
gunicorn -b 127.0.0.1:8000 pure_django:app -k tornado
gunicorn -b 127.0.0.1:8000 pure_django:app -k gevent

# 3. tornado
# tornado 从6.0版本不支持其它WSGI服务器上运行了,只能使用自己的服务器
python pure_tornado.py

5. 建议

  1. IO 密集型场景 - 建议使用gevent或者asyncio
  2. CPU 密集型场景 - 建议增加workers数量
  3. 不确定内存占用? - 建议使用gthread
  4. 不知道怎么选择? - 建议增加workers数量

参考

pressure_test_comparison's People

Contributors

linu223xprob1e avatar nuovovita avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.