【mlflow系列7】flask VS Gunicorn

简介: 【mlflow系列7】flask VS Gunicorn

背景


最近在测试mlflow性能的时候,发现了一个很奇怪的事情,我们知道mlflow是用(Gunicorn)[https://github.com/mlflow/mlflow/blob/master/mlflow/pyfunc/backend.py#L76] 启动服务的,按照道理说Gunicorn会比flask自带的服务性能会好,但是经过测试,恰好相反,而且并发量越大,两者的差别越大


分析


python中我们用的是版本 是flask 1.1.0 gunicorn 19.9.0

就在百思不得其解的时候,必须拿出的源码分析大法,我们现在就来看一下

对于mlflow,如果启动的时候,不指定任何跟Gunicorn 相关的参数的时候,默认的worker个数为1,且threads的个数也是1,且默认的worker-class为syn,也就是同步方式,有关Gunicorn的解释, 可以参考这篇文章,也就是说只有一个worker 同步的工作


而对比flask自带的web服务来说, flask-1.1.0 app.py,也就是说flask 1.1.0 默认情况下,是多线程处理的

 options.setdefault("threaded", True)

所以到这里,真相自然就出来了

当然我们在使用mlflow的时候按照以下方式增加worker数目和thread数据

export GUNICORN_CMD_ARGS="-w 4 --threads 2"

关于python GIL,可以参考该文章

相关文章
|
监控 Serverless API
函数计算操作报错合集之在函数计算用gunicorn启动flask,会报错找不到这个包,该怎么办
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
317 0
|
Python
gunicorn flask 获取进程pid号
进程(pid)和线程(tid)的区别 方法: pid=os.getpid() 发现: gunicorn是针对每一次请求随机提供一个pid来完成这次请求。
3635 0
|
Kubernetes NoSQL 开发工具
一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
2023年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像与容器时,怎样快速精准的对海量容器进行管理和编排就又成了新的课题,此时,由Google开源的Kubernetes(读音\[kubə'netis\],业界也有称其k8s的,但k8s其实就是文盲版的Kubernetes,只是因为k和s之间有8个字母)就应时而生了,它是一个开源的用于多个主机虚拟成一个云平台后进行容器资源管理和应用编排引擎,致力于让部署容器化应用简单并且高效,提供了应用的全生命周期管理,如应用部署,规划,更新,维护等机制。本次我们尝试在Win10/Mac系统下,
一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
|
缓存 负载均衡 安全
利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构
本次使用Nginx反向代理Flask服务,为什么要加一层Nginx呢?因为Nginx可以直接处理静态文件请求而不用经过应用服务器,避免占用宝贵的运算资源,并且可以缓存静态资源,使访问静态资源的速度有效提高。同时它可以吸收一些瞬时的高并发请求,让Nginx先保持住连接(缓存http请求),然后后端慢慢消化掉这些并发。当然了,最重要的一点就是Nginx可以提供负载均衡策略,这样我们的应用服务就可以横向扩展,分担压力了。
利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构
|
Ubuntu Linux 持续交付
Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像
书接上回,之前一篇:[Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略](https://v3u.cn/a_id_163),阐述了如何使用Celery异步推送Websocket消息,现在我们利用Docker将这个完整项目部署起来,为什么用Docker呢?原因很简单,这种容器技术可以将整个项目用单个容器装起来,仅仅只需要维护一个简单的配置文件就告诉电脑每次部署要把什么东西装进容器,甚至把这个过程自动化,部署流程就会变得简单、方便。
Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像
|
应用服务中间件 nginx Python
实战并发测试验证gunicorn对flask的影响
实战一把gunicorn到底能不能提升性能
1373 0
|
应用服务中间件 nginx Python
Python:Flask部署Nginx、gunicorn、gevent、flask、supervisor
Python:Flask部署Nginx、gunicorn、gevent、flask、supervisor
495 0
|
应用服务中间件 Linux Shell
python编程:mac环境gunicorn+nginx部署flask项目
python编程:mac环境gunicorn+nginx部署flask项目
694 0
|
应用服务中间件 nginx Python
gunicorn +nginx+python3 部署flask项目(gevent+gevent)--依赖的包
gunicorn +nginx+python3 部署(gevent+gevent)--依赖的包 bind = ["0.0.0.0:5010"]workers = 4backlog = 2048worker_class = 'gevent'forwarded_allow_ips = "*"keepa...
1532 0
智能化运维平台部署(gunicorn+nginx+gevent+supervisor部署flask+vue)
目前智能化运维平台已完成第一版,架构采用基于VUE的大前端架构iview和基于python语言的后端架构flask。通过gunicorn+gevent+supervisor+nginx进行部署,现将部署思路、步骤、过程踩的坑和解决方案记录下来与大家分享,欢迎大家批评指正!
4247 0