經過大量的實驗(在 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在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版
中文版,非常好用

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),