0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python性能之服務(wù)優(yōu)化的方法解析

馬哥Linux運維 ? 2017-12-31 01:04 ? 次閱讀

初看這個標題,相信很多同學都笑了,python有性能可言么,呵呵噠...確實哦,python其實就是為了快速開發(fā)應(yīng)用而出生的,雖然python的服務(wù)都以性能低而聞名全世界,但是總該有優(yōu)化的地方吧,呵呵噠....

這不,這兩天本作者就碰見了這樣一個問題,首先自我介紹下,我是干嘛的,肯定是屌絲程序員了,這個猜都不用猜,要不然也不會蛋疼的寫這篇文章了,我們組是基礎(chǔ)開發(fā)組,就是專門開發(fā)一些剝離業(yè)務(wù)的組件讓其他部門去用,比如業(yè)務(wù)監(jiān)控,業(yè)務(wù)報警,服務(wù)數(shù)據(jù)采集等等一堆搬磚的活.好了,廢話不多說了,估計看到這的也都看煩了...你們真的煩了么

這樣滴,我們這有個收集業(yè)務(wù)數(shù)據(jù)的組件簡稱M好啦,首先他要在業(yè)務(wù)服務(wù)器上建個udpserver,然后就靜靜的等業(yè)務(wù)的客戶端上報數(shù)據(jù)過來,數(shù)據(jù)格式是key-value形式的,然而就在最近幾天,有人在給業(yè)務(wù)機器做壓測的時候,發(fā)現(xiàn)一個問題,隨著并發(fā)的增加,這個M組件的cpu使用率也在不斷上升,擦,這下服務(wù)器不愿意了,開始瘋狂報警,然后做壓測的那個人就找我這來了,巴拉巴拉一堆,意思就是我給業(yè)務(wù)做壓測,你收集數(shù)據(jù)的組件飚個毛啊......

然而我是那么容易被打倒的么,就解釋說當然啊,你在給業(yè)務(wù)壓測的時候,同時你的client也在請求我啊,相當于我的并發(fā)量也在上升啊,不飚才怪呢,好吧,說歸說,抱著工匠精神,開始找問題吧...

這個M組件是用python寫的多線程的udpserver,經(jīng)本人測試,當并發(fā)達到2000的時候,cpu就100%左右了,其實udp相比tcp而言性能已經(jīng)很高了,不過這個并發(fā)還是有點感人啊,改成多進程也試了下,cpu占用還是70%左右,畢竟多進程適用計算密集型的,于是就想到了協(xié)程,協(xié)程像是一種在程序級別來模擬系統(tǒng)級別 的進程,由于是單進程,并且少了上下文切換,于是相對來說系統(tǒng)消耗很少,而網(wǎng)上的各種測試也表明,協(xié)程確實擁有驚人的速度。并且在實現(xiàn)過程中,協(xié)程可以 用以前同步思路的寫法,而運行起來確是異步的,挺有意思。

聽說python有個模塊叫做eventlet很強大,eventlet的核心是協(xié)程(也叫做green thread)。協(xié)程的好處是沒有線程開銷來的大(比如切換代價很?。M瑫r協(xié)程由于調(diào)度都由開發(fā)者自己決定,所以對lock的需求就很低了

010F5O38-0.png

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

010F55c7-1.png

上面是官方的例子,gevent是一個基于libev的python并發(fā)框架,以微線程greenlet為核心,使用了epoll事件監(jiān)聽機制以及諸多其他優(yōu)化而變得高效.而且其中有個monkey類, 將現(xiàn)有基于Python線程直接轉(zhuǎn)化為greenlet(類似于打patch)。

我自己測試了下,無論是eventlet寫的uds還是gevent寫的udpserver 并發(fā)達到2000時,cpu大概占用到30%左右,性能比之前降了2/3,效果還是很顯著的,不過這個還是沒有達到理想效果,后期準備嘗試下日志的方式,應(yīng)該會比現(xiàn)在更省資源,就怕磁盤受不了,更何況我們用的還是所謂的云主機~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 優(yōu)化
    +關(guān)注

    關(guān)注

    0

    文章

    220

    瀏覽量

    23856
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84375

原文標題:榨干python性能之服務(wù)優(yōu)化

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    AI大模型的性能優(yōu)化方法

    AI大模型的性能優(yōu)化是一個復雜而關(guān)鍵的任務(wù),涉及多個方面和策略。以下是一些主要的性能優(yōu)化方法: 一、模型壓縮與
    的頭像 發(fā)表于 10-23 15:01 ?356次閱讀

    使用Python構(gòu)建高效的HTTP代理服務(wù)

    構(gòu)建一個高效的HTTP代理服務(wù)器在Python中涉及多個方面,包括性能優(yōu)化、并發(fā)處理、協(xié)議支持(HTTP/HTTPS)、錯誤處理以及日志記錄等。
    的頭像 發(fā)表于 10-23 07:41 ?85次閱讀

    如何優(yōu)化Linux服務(wù)器的性能

    優(yōu)化Linux服務(wù)器的性能是一個綜合性的任務(wù),涉及硬件、軟件、配置、監(jiān)控等多個方面。以下是一個詳細的指南,旨在幫助系統(tǒng)管理員和運維人員提升Linux服務(wù)器的
    的頭像 發(fā)表于 09-29 16:50 ?206次閱讀

    Linux服務(wù)性能查看方法

    Linux服務(wù)性能查看是系統(tǒng)管理員和開發(fā)人員在日常工作中經(jīng)常需要進行的任務(wù),以確保系統(tǒng)穩(wěn)定運行并優(yōu)化資源使用。以下將詳細介紹多種Linux服務(wù)
    的頭像 發(fā)表于 09-02 11:15 ?757次閱讀

    韓國服務(wù)器的性能如何提升

    韓國服務(wù)器的性能可以通過硬件升級、網(wǎng)絡(luò)優(yōu)化、緩存優(yōu)化和軟件優(yōu)化來提升。具體方法如下,rak小編為
    的頭像 發(fā)表于 08-15 11:33 ?203次閱讀

    OpenHarmony開機優(yōu)化

    、磁盤I/O等,并以圖表形式展示出來。 使用方法 參考文檔:OpenHarmony性能調(diào)優(yōu)工具—boochart_小~Q-Laval社區(qū) 通過Bootchart工具,開發(fā)者可以深入了解系統(tǒng)的啟動過程,并
    發(fā)表于 07-01 16:39

    python解析netflow數(shù)據(jù)到csv的流程詳解

    本文主要講解了linux下通過tcpdump抓取netflow數(shù)據(jù)包,并將其導入到wireshark進行解析,然后通過wireshark導出數(shù)據(jù)為json文件,再通過python腳本將其解析為csv文件以便做數(shù)據(jù)分析。
    的頭像 發(fā)表于 05-01 11:18 ?621次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>解析</b>netflow數(shù)據(jù)到csv的流程詳解

    美國站群服務(wù)優(yōu)化:提升性能與可靠性的關(guān)鍵功能

    隨著互聯(lián)網(wǎng)的迅猛發(fā)展,網(wǎng)站的性能和可靠性成為了企業(yè)成功的關(guān)鍵因素之一。美國作為全球互聯(lián)網(wǎng)的中心,其站群服務(wù)器在全球范圍內(nèi)都有著廣泛的應(yīng)用。本文將探討美國站群服務(wù)優(yōu)化的關(guān)鍵功能,以提升
    的頭像 發(fā)表于 01-25 11:56 ?307次閱讀

    加速Python for循環(huán)的12種方法

    Python內(nèi)建的一個常用功能是timeit模塊。下面幾節(jié)中我們將使用它來度量循環(huán)的當前性能和改進后的性能。
    的頭像 發(fā)表于 01-04 17:33 ?1873次閱讀
    加速<b class='flag-5'>Python</b> for循環(huán)的12種<b class='flag-5'>方法</b>

    查看python安裝路徑的方法

    如何查看Python安裝路徑,以及各個操作系統(tǒng)下的細節(jié)和注意事項。 一、Windows操作系統(tǒng)下查看Python安裝路徑的方法 對于Windows操作系統(tǒng),有多種方法可以查看
    的頭像 發(fā)表于 11-29 14:54 ?1.1w次閱讀

    運行Python程序的幾種常見方法

    Python是一種高級編程語言,具有簡單易學,易于閱讀和調(diào)試的特點。當你完成了一個Python程序之后,你需要運行它以檢查程序是否按照預期工作。下面是運行Python程序的幾種常見方法
    的頭像 發(fā)表于 11-28 15:32 ?2320次閱讀

    差動放大器的性能優(yōu)化方法

    電子發(fā)燒友網(wǎng)站提供《差動放大器的性能優(yōu)化方法.pdf》資料免費下載
    發(fā)表于 11-23 14:32 ?0次下載
    差動放大器的<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b><b class='flag-5'>方法</b>

    python調(diào)用math函數(shù)的方法

    中。本文將詳細介紹math模塊中的各種數(shù)學函數(shù)的調(diào)用方法,包括函數(shù)的功能、參數(shù)的使用和返回值的含義等方面,以幫助讀者更好地理解和應(yīng)用這些函數(shù)。 一、導入math模塊 要使用math模塊中的函數(shù),首先需要將其導入到Python程序中??梢允褂胕mport語句將
    的頭像 發(fā)表于 11-22 11:01 ?2669次閱讀

    MySQL性能優(yōu)化方法

    MySQL 性能優(yōu)化是一項關(guān)鍵的任務(wù),可以提高數(shù)據(jù)庫的運行速度和效率。以下是一些優(yōu)化方法,包括具體代碼和詳細優(yōu)化方案。
    的頭像 發(fā)表于 11-22 09:59 ?527次閱讀

    python的insert方法

    insert()方法Python中的列表對象提供的一個方法,用于在指定位置插入一個元素。該方法的語法如下: list. insert ( index , obj) 其中,index表
    的頭像 發(fā)表于 11-21 14:27 ?1365次閱讀