6個Python效能優化技巧

2021-10-10 16:39:51 字數 2598 閱讀 1510

python是一門非常酷的語言,因為很少的python**可以在短時間內做很多事情,並且,python很容易就能支援多工和多重處理。

python的批評者聲稱python效能低效、執行緩慢,但實際上並非如此:嘗試以下6個小技巧,可以加快pytho應用程式。

python使許多程式設計任務變得簡單,但是對於很關鍵的任務並不總是提供最好的效能。使用c、c++或者機器語言擴充套件包來執行關鍵任務能極大改善效能。這些包是依賴於平台的,也就是說,你必須使用特定的、與你使用的平台相關的包。簡而言之,該解決方案提供了一些應用程式的可移植性,以換取效能,您可以獲得只有通過直接向底層主機程式設計。下面這些擴充套件包你可以考慮新增到你的個人擴充套件庫中:

cython

pyinlne

pypy

pyrex

這些包有不同的作用和執行方式。例如,pyrex 讓python處理一些記憶體任務變得簡單高效;pyinline可以直接讓你在python應用程式中使用c**,雖然內聯**被單獨編譯,但是如果你能高效的利用c**,它可以在同乙個地方處理每一件事情。

有很多古老的python**在執行時將花費額外的時間去建立乙個自定義的排序函式。最好的排序方式是使用關鍵字和預設的sort()方法,看看下面的示例:

import operator

somelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]

somelist.sort(key=operator.itemgetter(0))

somelist

#output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]

somelist.sort(key=operator.itemgetter(1))

somelist

#output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]

somelist.sort(key=operator.itemgetter(2))

somelist

#output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],

每乙個案例的列表是根據你選擇作為關鍵字引數的索引排序的,這種方式對字串和數字排序同樣適用。

每一種程式語言都強調迴圈語句的優化,python也是一樣的。儘管你可以依賴於豐富的技術讓迴圈執行的更快,然而,開發者經常忽略的乙個方法是避免在迴圈內部使用點拼接字串。對於下面的示例:

lowerlist = ['this', 'is', 'lowercase']

upper = str.upper

upperlist =

for word in lowerlist:

print(upperlist)

#output = ['this', 'is', 'lowercase']

每一次呼叫str.upper,python都會去求這個方法的值。但是如果你把求值的結果放入乙個變數中,就能提高程式的效能。這個關鍵是減少python內執行的迴圈次數,因為python解析這些例項是比較慢的。

當你使用了新的函式庫,獲得了python的新版本,你需要保證**依然能夠執行,檢查應用,修正差異。

然後,如果你僅僅是保證應用能夠在新版本上執行,你可能錯過新功能的更新。一旦你做了改進,在新版本下配置應用程式,檢查問題區域並優先使用新功能更新,對於之前的公升級,使用者將看到更大效能的提公升。

每一次你建立應用的時候,都使用同一種程式設計方法,在某些情況下降導致程式執行會比預期的慢。在分析的過程中做一些小試驗。例如,當管理字典中的資料項時,可以採用安全的方法確定資料項是否已經存在並需要更新它,或者你可以直接新增條目,然後處理專案根本不存在的情況。

n = 16

mydict = {}

for i in range(0, n):

char = 'abcd'[i%4]

if char not in mydict:

mydict[char] = 0

mydict[char] += 1

print(mydict)

當mydict是空時,上述的**通常會執行的更快。但當mydict已經有資料填充時,就有更好的方法可以選擇:

n = 16

mydict = {}

for i in range(0, n):

char = 'abcd'[i%4]

try:

mydict[char] += 1

except keyerror:

mydict[char] = 1

print(mydict)

兩種情況下都輸出,唯一的差異是輸出是怎麼獲得的。站在盒子外考慮和建立新的程式設計技巧都能讓你的程式獲得更快的執行速度。

開發者有時會忘記計算機不能識別任何一種現在應用程式語言,它只識別機器**。為了執行程式,需要乙個應用將人類可讀的**轉換成計算機能識別的**。當用一種語言寫程式時,例如python,然後用另外一種語言來執行它,例如c++,從效能角度看是有道理的。這個取決於你想要用這個應用做什麼和主機系統能夠提供什麼資源。

乙個有趣的交叉編譯器,nuitka, 能將python轉換成c++**,結果是你可以再本機模式下執行應用,而不是依賴於直譯器。根據平台和任務中,你可以看到顯著的效能提高。

Nginx效能優化技巧(6)

在編譯nginx時,預設以debug模式進行,而在debug模式下會插入很多跟蹤和assert之類的資訊,編譯完成後,乙個nginx要有好幾兆位元組。在編譯前取消nginx的debug模式,編譯完成後nginx只有幾百千位元組,因此可以在編譯之前,修改相關原始碼,取消debug模式,具體方法如下 在...

Oracle SQL 效能優化技巧

sun2004發表於 2008 12 25 11 28 眾所周知,資料庫設計的好壞直接關係到資料庫執行的效率。根據筆者的經驗,對於提公升資料庫效能來說,合理的資料庫設計,比公升級伺服器的硬體配置,還要來的有效。但是,筆者無論是在跟同事合作,又或者是在論壇上跟相關同行交流的時候,總是會發現有些人有一些...

Apache效能優化技巧

本文出自 本文簡要介紹了幾個優化 apache 的技巧,在實戰中十分有用。公升級 apache 到最新版本,新版本往往包含效能提公升和安全更新。在 httpd.conf 中設定 hostnamelookups off 能避免針對每個訪問者的 dns 網域名稱的反向查詢。採用另外一台伺服器處理檔案。保...