初看這個標題,相信很多同學都笑了,python有性能可言么,呵呵噠...確實哦,python其實就是為了快速開發應用而出生的,雖然python的服務都以性能低而聞名全世界,但是總該有優化的地方吧,呵呵噠....
這不,這兩天本作者就碰見了這樣一個問題,首先自我介紹下,我是干嘛的,肯定是屌絲程序員了,這個猜都不用猜,要不然也不會蛋疼的寫這篇文章了,我們組是基礎開發組,就是專門開發一些剝離業務的組件讓其他部門去用,比如業務監控,業務報警,服務數據采集等等一堆搬磚的活.好了,廢話不多說了,估計看到這的也都看煩了...你們真的煩了么
這樣滴,我們這有個收集業務數據的組件簡稱M好啦,首先他要在業務服務器上建個udpserver,然后就靜靜的等業務的客戶端上報數據過來,數據格式是key-value形式的,然而就在最近幾天,有人在給業務機器做壓測的時候,發現一個問題,隨著并發的增加,這個M組件的cpu使用率也在不斷上升,擦,這下服務器不愿意了,開始瘋狂報警,然后做壓測的那個人就找我這來了,巴拉巴拉一堆,意思就是我給業務做壓測,你收集數據的組件飚個毛啊......
然而我是那么容易被打倒的么,就解釋說當然啊,你在給業務壓測的時候,同時你的client也在請求我啊,相當于我的并發量也在上升啊,不飚才怪呢,好吧,說歸說,抱著工匠精神,開始找問題吧...
這個M組件是用python寫的多線程的udpserver,經本人測試,當并發達到2000的時候,cpu就100%左右了,其實udp相比tcp而言性能已經很高了,不過這個并發還是有點感人啊,改成多進程也試了下,cpu占用還是70%左右,畢竟多進程適用計算密集型的,于是就想到了協程,協程像是一種在程序級別來模擬系統級別 的進程,由于是單進程,并且少了上下文切換,于是相對來說系統消耗很少,而網上的各種測試也表明,協程確實擁有驚人的速度。并且在實現過程中,協程可以 用以前同步思路的寫法,而運行起來確是異步的,挺有意思。
聽說python有個模塊叫做eventlet很強大,eventlet的核心是協程(也叫做green thread)。協程的好處是沒有線程開銷來的大(比如切換代價很小)。同時協程由于調度都由開發者自己決定,所以對lock的需求就很低了

上面是一個uds(unix domian socket)的例子,這里也是通過一個pool限制資源的使用。當每個請求來的時候通過spawn_n方法把對這個請求的handle方法放到獨立的協程中去處理。而handle中的recv這些方法都是被綠化過的,所以如果讀取不到數據這些方法就會把cpu時間交出來給別的協程使用,eventlet還有一個衍生品gevent,先看看例子:

上面是官方的例子,gevent是一個基于libev的python并發框架,以微線程greenlet為核心,使用了epoll事件監聽機制以及諸多其他優化而變得高效.而且其中有個monkey類, 將現有基于Python線程直接轉化為greenlet(類似于打patch)。
我自己測試了下,無論是eventlet寫的uds還是gevent寫的udpserver 并發達到2000時,cpu大概占用到30%左右,性能比之前降了2/3,效果還是很顯著的,不過這個還是沒有達到理想效果,后期準備嘗試下日志的方式,應該會比現在更省資源,就怕磁盤受不了,更何況我們用的還是所謂的云主機~
-
優化
+關注
關注
0文章
220瀏覽量
24711 -
python
+關注
關注
57文章
4876瀏覽量
90025
原文標題:榨干python性能之服務優化
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
深度解析LTC7892:高性能雙路升壓控制器的卓越之選
1688 商品詳情 API 調用與數據解析 Python 實戰
深入解析TRF3761:高性能集成頻率合成器的卓越之選
深入解析TRF3761:高性能集成頻率合成器的卓越之選
深入解析ISO1042:高性能隔離CAN收發器的卓越之選
LDO性能優化的應用技巧
華納云香港服務器數據庫索引優化策略
華納云服務器Linux系統電源管理與節能優化配置方法
從電機優化到性能飛升!ANSYS Maxwell 低頻電磁場仿真全解析
鴻蒙5開發寶藏案例分享---長列表性能優化解析
鴻蒙5開發寶藏案例分享---Web加載時延優化解析
鴻蒙5開發寶藏案例分享---性能優化案例解析
HarmonyOS優化應用內存占用問題性能優化一
讓性能飆升!使用Python并行計算榨干樹莓派算力!
python性能之服務優化的方法解析
評論