Flask gevent 多进程WSGI(非gunicorn)

Flask gevent 多进程WSGI(非gunicorn)

python多进程gevent,Flask gevent multiprocess WSGI,Flask gevent 多进程WSGI,Flask多进程gevent。

题外话:Flask,Instagram据说扛住了上亿日活,以前是Django。其是一个非常优秀的web service 框架,简洁灵活,可以利用大量的第三方组件和模块来快速开发。

如今,Instagram 的总注册用户达到 30 亿,月活用户超过 7 亿 (作为对比,微信最新披露的月活跃用户为 9.38 亿)。而令人吃惊的是,这么高的访问量背后,竟完全是由以速度“慢”著称的 Python + Django 支撑。

时至今日,即使已经拥有超过 30 亿的注册用户。Instagram 仍然是 Python 和 Django 的重度使用者。Instagram 的工程师 Hui Ding 说到: 『一直到用户 ID 已经超过了 32bit int 的限额(约为 20 亿),Django 本身仍然没有成为我们的瓶颈所在。』

 flask + gevent + multiprocess + wsgi简介

常常大家都是用gunicorn来解决flask后端部署并发的问题, 然而觉得自启多进程是为更优雅的高并发方式。这样就不需要gunicorn了。也没有额外的第三方部署工作,于是有了以下flask + gevent + multiprocess + wsgi测试

flask + gevent + multiprocess + wsgi程序代码cppla.py

测试环境

机器配置

  • 4vCPU
  • 8GB

环境配置

  • Centos 8
  • Python 3.6.8
  • Flask  1.1.2
  • Gevent 1.5.0

压测工具

  • WRK
  • 4H8G机器

单进程 + 协程 + WSGI

测试结果

QPS : 2361 r/s

该模式启动了一个进程

测试详情

多进程 + 协程 + WSGI

测试结果

QPS : 7500 r/s

该模式启动了4+1个进程(4vCPU)

测试详情

协程并发真的很强!4核虚拟机多进程并发高达7000QPS,回头测试一下python协程和golang协程的效率对比。

补充:4核8线程3.6GHZ物理机上多进程并发高达15000QPS

也就是“理想”情况,每秒1w5 QPS,每小时5400万请求。

转载务必注明:https://cpp.la/439.html, by:cpp.la

 

14 Replies to “Flask gevent 多进程WSGI(非gunicorn)”

  1. 为什么,用多进程,多线程的时候就报错呢,AttributeError: Can’t pickle local object ‘run..server_forever’ 还查询不到原因,求解

    1. 这个和多线程,多进程没有什么关系。 看报错是pickle包导致的。考虑进/线程 安全没有?

    2. 用Linux测,程序能跑通,但没有博主显示的效果是为什么?

      1. 可以检查下程序呢?

        或者有锁。
        或者多进程+协程的模式没启动成功。

  2. 大佬,搞一个gunicorn的教程呗,网上的gunicorn用配置文件的都不全,讲的也不细。

    1. gunicorn本身就是利用这篇文章讲的“多进程 + 协程”来跑的, 为什么不直接用gevent呢??直接用gevent更优雅、性能更好, 也方便弹性扩展。

  3. AttributeError: Can’t pickle local object ‘run..server_forever’这个错误
    导入包改成这个 就可以了 from multiprocessing.dummy import Process

      1. gpu环境可以启动多进程,但是在调用某个预测接口时报 CUDA error(3), initialization error. 网上找的说需要设置 np.set_start_method(“spawn”, force=True),但是加上这个以后就起不来了。

回复 ouyoung 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注