经过大量的实验(在 disqus.com和 getsentry.com上),我可以确切的说:uwsgi应该成为Python世界的标准。 把它和nginx结合,在基于 Python的Web应用程序上你能获得在线程(或非线程)之上更好的性能体验。
更新:忽略古老的说法“你给任何度量是慢”,我在这里说的请求是指后端节点,他们处理输入事件(从20KB到1MB大小的请求),在网络跳过数跳经过各种授权和配额策略,并最形成一些队列操作。卸载尽可能多的工作负载。(本段翻译有问题,请参考原文,译者注)
服务策略
目前已经有相当数量的方法可以用来运行Python应用程序。我不打算使用mod_wsgi,最重要的,我并不想说明事件模型如何工作。我不相信在Python的世界它们依旧使用,所以这篇文章的主题也不是关于传统的线程(或多进程)的Python应用程序。
相反,我将专注于两个最流行且我最熟悉的解决方案:gunicorn和uwsgi。
Gunicorn(Python UNIX平台的wsgi服务器)
回顾过去,Python的Web服务器的解决方案基本上只有mod_wsgi。其中最流行的(或理解为时尚)的方法是最近Gunicorn。
实际上,我仍然建议使用gunicorn,这样可以极大的减少不便:它可以漂亮的嵌入Django而且设置简单。
它也有10%的配置选项和uwsgi一致(这对某些人来说是件好事),除此之外,比较看来,它提供了与uwsgi(或任何其他Python Web服务器)几乎相同的基本特性。
uwsgi
在我看来这是唯一的选择,从Gunicorn到uwsgi。将有更高性能的,有更多极易明白的配置选项,通过协议可以与nginx交互也增加了优势。
它的配置也是相当简单,找到一篇文章相关文章就可以了,后来更多。
我开始使用uwsgi来跑一些应用,使用–processes=10和–threads=10来测试服务器的多CPU,目的有两个:
支持情况
测试降低内存使用量的可能性
测试线程安全的支持情况
(对于这些测试是否值得,DISQUS是 单线程运行的,我想保持尽可能的精简,把每个节点的能力发挥到极致)
不断趋向成功的迭代
我们使API平均响应时间降到40ms以内,我非常自豪。这里我说的API相应时间是指:从请求击中了Python服务器到服务器返回响应到代理所花费的时间。
不幸的是,当我们始获得越来越大的流量并出现访问尖峰后响应时间出现问题了,波动的响应时间不再符合我们开始的设想,尽管服务节点上我们仍然有大约30%的内存和60%的资源空余。
在不少调整后,我们停用了大量uwsgi进程的方法,让nginx的负载均衡它们(之前是让uwsgi本身负载平衡)。
这意味着什么呢,是不是做uwsgi过程= 10,我们运行10个单独的uwsgi实例代替–processes=10。
其结果是一个美丽的,一致的20ms的平均响应时间。
API响应时间
将他们组合在一起
我喜欢着手去做而非空谈,这里我给大家一些我们在线服务器的实际设置。
nginx
配置的第一块是Nginx的,我们需要实际计算并添加uwsgi的进程 后端数量,所以事情有点复杂。
我们首先建立在我们的网页配置列表:
# recipes/web.rb hosts = (0..(node[:getsentry][:web][:processes] - 1)).to_a.map do |x| port = 9000 + x "127.0.0.1:#{port}" end template "#{node['nginx']['dir']}/sites-available/getsentry.com" do source "nginx/getsentry.erb" owner "root" group "root" variables( :hosts => hosts ) mode 0644 notifies :reload, "service[nginx]" end
Nginx的配置很简单:
# templates/getsentry.erb upstream internal { <% @hosts.each do |host| %> server <%= host %>; <% end %> } server { location / { uwsgi_pass internal; uwsgi_param Host $host; uwsgi_param X-Real-IP $remote_addr; uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto; include uwsgi_params; } }
现在,我们已经设置了uwsgi的主机数量并分配了权重值,从9000端口开始,它们都是被uwsgi配置使用的套接字地址。
uwsgi
另一方面,我们使用supervisor来控制uwsg进程,这也非常简单:
# recipes/web.rb command = "/srv/www/getsentry.com/env/bin/uwsgi -s 127.0.0.1:90%(process_num)02d --need-app --disable-logging --wsgi-file getsentry/wsgi.py --processes 1 --threads #{node['getsentry']['web']['threads']}" supervisor_service "web" do directory "/srv/www/getsentry.com/current/" command command user "dcramer" stdout_logfile "syslog" stderr_logfile "syslog" startsecs 10 stopsignal "QUIT" stopasgroup true killasgroup true process_name '%(program_name)s %(process_num)02d' numprocs node['getsentry']['web']['processes'] end
位置的选择
除非有人想出了一个非常有说服力的论据:为什么应该有另一种方式(或某种该情形下不能工作的情况),我希望能听到这种模式因为Python的世界变得更标准。最起码,我希望看到关于如何提高uwsgi内进程管理的一些辩论的火花。
以上是如何使用Nginx + UWSGI的详细内容。更多信息请关注PHP中文网其他相关文章!

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python和C 在内存管理和控制方面的差异显着。 1.Python使用自动内存管理,基于引用计数和垃圾回收,简化了程序员的工作。 2.C 则要求手动管理内存,提供更多控制权但增加了复杂性和出错风险。选择哪种语言应基于项目需求和团队技术栈。

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

选择Python还是C 取决于项目需求:1)Python适合快速开发、数据科学和脚本编写,因其简洁语法和丰富库;2)C 适用于需要高性能和底层控制的场景,如系统编程和游戏开发,因其编译型和手动内存管理。

Python在数据科学和机器学习中的应用广泛,主要依赖于其简洁性和强大的库生态系统。1)Pandas用于数据处理和分析,2)Numpy提供高效的数值计算,3)Scikit-learn用于机器学习模型构建和优化,这些库让Python成为数据科学和机器学习的理想工具。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

WebStorm Mac版
好用的JavaScript开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。