首页
学习
活动
专区
圈层
工具
发布

Gunicorn性能优化:提升Python Web应用的服务效率

当使用工作进程和线程时,建议的最大并发请求数仍然是(2*CPU)+1。...在Python中,线程和“伪线程”是并发执行的手段,但不是并行;而工作进程则既是并发的也是并行的。 总结 对于I/O密集型应用,使用“伪线程”可获得最佳性能。...此外,还有其他优化建议,包括调整worker类、超时时间、保持活动连接、worker类参数、使用反向代理、监控和扩展、优化应用代码、升级Gunicorn和合理分配资源: 调整 Worker 类: Gunicorn...示例使用 gevent:gunicorn -k gevent -w 4 myapp:app Worker 超时: 为 worker 进程设置合理的超时时间。...如果 worker 在指定的超时时间内没有响应,Gunicorn 将重新启动它。

2.2K10

Gunicorn的使用手册看这篇就够了【用过都说好】

1.2 Debugging 命令 --reload=True,或者在gunicorn.conf.py 文件中加上reload=True 配置。 这样的话,当代码变动时gunicorn就可以重启了。...为了在 Gunicorn 中使用多线程。我们使用了 gthreads 模式,指定threads参数。...)能处理的最大请求数,任何一个大于0的值都会限制工作进程(worker)在重启之前处理的请求数量,这是一种帮助限制内存泄漏的简单方法。...工作进程在超过设置的超时时间内没有响应将会被杀死并重启。 当值为0就表示禁用超时设置。 通常,默认的30秒就够了,只有当确定对同步工作进程有影响时才会修改该值。...使用gevent模式会出现一些兼容性问题。 使用gevent时,系统会使用monkey patch。

20.8K25
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Clubhouse技术实践:如何扩大服务规模,并以3倍效率运行Python工作负载?

    但是,当我们突然在我们的 Web 主机上运行一个较大的部署时,因为有了那么多的实例,我们的负载平衡器开始间歇性地超时,并且蓝 / 绿部署期间的翻转流量让部署 "卡住"了。...但是,当我们切换到非常大的,有 96 个 vCPU 的实例类型——每个节点上运行 144 个 Gunicorn worker 之后,我们惊奇地发现,在 CPU 利用率仅仅只有 25% 时,延迟就开始膨胀...没有任何选项可以限制每个套接字的并发数,也没有任何选项可以防止被挂起的套接字接收新的请求。 这使我们产生了一个问题:我们到底为什么要使用 NGINX?...在一个地方排队请求——HAProxy 前端——而不是在每个 Gunicorn 进程中单独的 backlog 上。 在应用服务器和 Gunicorn 套接字的基础上监控并发性、错误率和延迟。...这个解决方案乍一看有点荒唐,但在 Gunicorn 内部做负载均衡,是不是就不那么荒唐了?

    65320

    剖析Web技术栈(三)

    我们在处理任何生产系统时所面临的主要问题是性能。当我们最小化代码时,考虑一下我们如何处理JavaScript:我们有意识地混淆代码以使文件更小,但这样做的唯一目的是使文件的读取速度更快。...如果框架与网关接口兼容,我们可以添加处理并发性的软件,并通过兼容层使用框架。这样的组件是一个可用于生产的HTTP服务器,在Python世界中有两个常见的选择是Gunicorn和uWSGI。...但是,当我们增加线程的数量时,必须记住,我们正在使用的机器具有有限的CPU功率和内存。...Gunicorn已经可以在它的工作线程之间分配负载了,所以这不是一个新的概念,但是我们通常希望在更大的层次上,在机器之间或者整个系统之间这样做。负载均衡可以是分层的,并且可以在多个级别上进行结构化。...一个典型的例子是HTTP重定向:如果用户访问服务时使用的前缀是http://而不是https://,会发生什么?

    1.2K10

    Python实战 | 基于 Flask 部署 Keras 深度学习模型

    该函数会序列化任何支持的 JSON 数据类型。...2.5 使用 Gunicorn 当我们执行上面的app.py时,使用的flask自带的服务器,完成了 web 服务的启动。...2000 # 最大客户并发量 timeout = 30 # 超时时间,默认30s reload = True # 开发模式,代码更新时自动重启 daemon = False # 守护Gunicorn进程...", 描述:使用Keras中预训练模型进行图像分类特征提取的代码可以正常跑通,当通过Flask来启动服务,访问预测函数时,出现上述错误。...测试了一下好像不行 Q2:无法启动服务,CRITICAL WORKER TIMEOUT 当使用 gunicorn 启动 flask 服务时,查看服务器状态和日志文件发现一直在尝试启动,但是一直没有成功。

    3.2K10

    通过Gunicorn、Supervisor和Nginx更好地运行Django

    使用预分叉模型,父进程可以在必要时杀死并重建子进程,提供了对内存泄漏的防护机制。 负载管理:Gunicorn 有多种类型的 worker 可供选择,包括同步 worker 和异步 worker。...配置灵活:Gunicorn 提供了大量的配置选项,你可以控制日志级别、输出位置、worker 数量、请求超时时间、SSL 设置等诸多方面。...在使用 Gunicorn 运行 Django 之前,你需要确保已经正确地安装了 Django 和 Gunicorn。...下面是使用 Nginx 作为 Gunicorn 的反向代理的详细步骤 安装 Nginx 在 Ubuntu/Debian 上,你可以通过 apt-get 来安装 Nginx: sudo apt-get install...以下是如何使用 Supervisor 托管 gunicorn 和 nginx 的步骤: 安装 Supervisor 在 Ubuntu/Debian 上,你可以通过 apt-get 来安装 Supervisor

    1.3K10

    一文解决 nginx + ingress + gunicorn 上传大文件报错的解决思路

    在基于 Kubernetes 部署,使用 Gunicorn 运行的 Python Web 应用中,上传大文件时出现了一系列的错误,现在将解决问题的思路记录如下。...Nginx 实现的 Ingress Controller 中的 Nginx 通过 Proxy 转发给 Gunicorn Gunicorn 会启动若干个 Worker 处理请求,所以 Gunicorn...在 Nginx 和 Ingress 中分别提高了读写的超时限制,将发送的超时设置为 600s,返回的超时设置为 30s。...这里的 send 和 read,主语不是客户端,而是 Nginx 自己,超时的时候,是 Nginx 向 Upstream 发送了文件,而等到 Upstream 处理完返回时候,超过了 proxy_read_timeout...修改 Gunicorn 的配置,将超时时间设置为 600s,重新上传,问题解决。

    3.3K20

    Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像

    同时Docker其强大的跨平台特性,可以让我们在任何系统下部署项目,包括经常令人诟病的Windows,值得一提的是本次在Win10下部署项目的流程同样适用于Centos、Mac os、Ubuntu等系统...Gunicorn+gevent来运行Flask项目,Gunicorn服务器作为wsgi app的容器,能够与各种Web框架兼容(flask,django等),得益于gevent等技术,使用Gunicorn...安装相应的库 pip install gunicorn gevent --user     编辑项目目录下的gunicorn.conf.py workers = 3 # 进程数 worker_class...通过网址访问一下,这里注意一点,就是Windows系统下,访问Docker容器需要通过分配的ip来访问,而不是我们常用的localhost。     完全没有任何问题。    ...结语:到这里我们的 Docker+Flask + Gunicorn就部署完毕了,将这个镜像上传Dockerhub仓库,在任何时间、任何地点、任何系统上,只要连着网、只要我们想,就都可以在短短1分钟之内部署好我们的项目

    1.5K40

    【Flask】使用gevent部署flask

    目的 使用 gevent 非阻塞的运行服务器程序 步骤 安装 在全局添加猴子 这能修改 python 默认的 IO 行为,让标准库变成 协作式(cooperative)的 API。...daemon=True worker_connections=1000000 #worker_connections最大客户端并发数量,默认情况下这个值为1000。...此设置将影响gevent和eventlet工作模式 graceful_timeout=0 #graceful_timeout优雅的人工超时时间,默认情况下,这个值为30。...在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死 limit_request_line=8048 #limit_request_line HTTP请求行的最大大小,此参数用于限制HTTP请求行的允许大小...此参数可以防止任何DDOS攻击 backlog=8048 #工作模式为gevent worker_class="gevent" debug=True chdir = './' proc_name='.

    2.7K10

    gunicorn简介、架构、安装与配置

    简介 Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使用非常简单...Gunicorn 服务器作为wsgi app的容器,能够与各种Web框架兼容(flask,django等),得益于gevent等技术,使用Gunicorn能够在基本不改变wsgi app代码的前提下,大幅度提高...Master从不知道任何关于客户端的信息。所有的请求和响应处理都是由 worker 进程来处理的。 Master(管理者) 主程序是一个简单的循环,监听各种信号以及相应的响应进程。...总结:gunicorn 会启动一组 worker进程,所有worker进程公用一组listener,在每个worker中为每个listener建立一个wsgi server。...install python-dev   gunicorn还需要库函数 libevent(1.4.x or 2.0.4) 运行Gunicorn 成功安装 gunicorn 之后有以下三个指令你可以直接使用

    4.7K20

    一个高性能的web服务是如何搭建的?

    gunicorn 是一个 python Wsgi http server,只支持在 Unix 系统上运行,下面我们来熟悉一下以 gunicorn 的配置与使用。...9 10if __name__ == '__main__': 11 app.run() 那么我们在 flask 的项目的目录下如何使用 gunicorn 来启动呢?...INT:处理请求的工作线程数,使用指定数量的线程运行每个worker。...,这个值为30,在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死;一般使用默认; 37 38--keep-alive INT:在keep-alive连接上等待请求的秒数,默认情况下值为2。...45 46-e ENV, --env ENV: 设置环境变量; 47 是不是觉得 gunicorn 的参数很多?在部署的时候如果输入这么大一串命令,我相信就算是对参数很熟悉的人,也有可能会输错!

    1.4K10

    如何在Ubuntu 16.04上使用Gunicorn和Nginx部署Falcon Web应用程序

    每当GET向/testURL 发送请求时,TestResource的方法on_get()都会调用方法。响应状态和身体使用变量设置res.status和res.body来分别。 保存文件并关闭编辑器。...: sync [2016-11-14 16:33:41 +0000] [9431] [INFO] Booting worker with pid: 9431 您可以使用任何您喜欢的端口号,但要确保它在1024...上面,并且任何其他程序都不会使用它。...第5步 - 使用Nginx向Gunicorn发送代理请求 我们将设置和配置Nginx以代理向Gunicorn的所有Web请求,而不是让Gunicorn直接向外界提供请求。...最后,您编写了一个Systemd单元文件并启用了该服务,以便在服务器启动时启动Web应用程序。 当您将自己的应用程序投入生产时,您将需要使用主机名而不是IP地址访问它们。

    2.3K40

    django celery的分布式异步之路(二) 高并发

    那python是不是在自欺欺人?不是的。看你程序的类型: 1)IO密集型 IO密集型程序的耗时基本都在打开文件/打开句柄进行读写,也就是消耗在IO上。...这种类型的程序,当线程阻塞在IO上时,交出线程控制权,给其他线程运行,当IO完成后再获得控制权继续跑,这样的话,可以在IO的时候跑其他的线程,其实是可以提高代码运行效率的。...2)计算密集型 你的程序基本就没有IO,而是在跑一个算法。那么对不起,这种类型的程序,你通过python多线程编程无法提升效率,甚至会再频繁切换线程控制权时,损失效率。...: --worker-class:指定了异步方式,使用的是gevent方式实现的异步,也就是每个worker(进程)中线程之前切换使用的是协线程切换。...可能大家有个疑问,gunicorn和nginx有啥区别?或者说我使用了gunicorn已经启动了多个实例,并且进行了负载均衡,我为什么要需要nginx呢?

    2.9K60

    Docker部署Gunicorn项目时的坑

    坑一:Docker run 之后没反应 什么都没有 日志都没有 检查Gunicorn配置文件,原来使用了daemon = True参数,这个参数是将Guncorn放到后台运行,所以消失了并且没有任何输出...解决方案:屏蔽daemon参数 坑二:Gunicorn没有Flask的日志输出  启动后只有Gunicorn的日志,而没有Flask的日志 解决方案:在Flask里面添加 if __name__!...= '__main__':    import logging #如果不是直接运行,则将日志输出到 gunicorn 中    gunicorn_logger= logging.getLogger('gunicorn.error...使用geventwebsocket.gunicorn.workers.GeventWebSocketWorker 时没有Flask的访问日志 解决方案:不知道怎么解决,将worker_class换为gevent...删除默认配置文件gunicorn.conf.py,或者使用gunicorn.conf.py去配置

    2.9K00

    如何在Debian 8上使用Postgres,Nginx和Gunicorn设置Django

    在本教程中,我们将演示如何在Debian 8上安装和配置某些组件以支持和服务Django应用程序。我们将设置PostgreSQL数据库,而不是使用默认的SQLite数据库。...在您的虚拟环境处于活动状态时,使用pip的本地实例安装Django,Gunicorn和psycopg2 PostgreSQL 适配器: 注意:无论您使用的是哪个版本的Python,在激活虚拟环境时,都应该使用...在此文件内部,定义了一个名为application的函数,该函数用于与应用程序通信。 完成测试后,在终端窗口中按CTRL-C以停止Gunicorn。 我们现在已经完成了Django应用程序的配置。...这比使用网络端口更安全,更快捷。我们还可以在这里指定任何可选的Gunicorn调整。...如果我们在启动时启用它,这将告诉systemd将此服务链接到什么。

    4.8K40

    基于Python的Web应用程序的Web服务器比较

    另外,gunicorn的兼容进程管理工具supervisor对进程的健康检查和自动拉起,保证了业务应用达到了服务级别(服务至少在 99.9% 的时间内都可用,如果使用F5负载均衡器设计可以达到99.99%...也就意味着有一个中心管理进程( master process )用来管理 worker 进程集合。Master从不知道任何关于客户端的信息。所有的请求和响应处理都是由 worker 进程来处理的。...此外,rc.d脚本无法自动重新启动崩溃的进程,并且许多程序在崩溃时无法正常重新启动。Supervisord将进程作为其子进程启动,并且可以配置为在崩溃时自动重新启动它们。...它还使用可由Python开发人员利用的扩展点构建。...已在许多服务器上使用。 |

    2.8K30
    领券