国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用Python編寫分析Python程序性能的工具的教程

2020-02-23 00:28:53
字體:
來源:轉載
供稿:網友

雖然并非你編寫的每個 Python 程序都要求一個嚴格的性能分析,但是讓人放心的是,當問題發生的時候,Python 生態圈有各種各樣的工具可以處理這類問題。

分析程序的性能可以歸結為回答四個基本問題:

        正運行的多快     速度瓶頸在哪里     內存使用率是多少     內存泄露在哪里

下面,我們將用一些神奇的工具深入到這些問題的答案中去。
用 time 粗粒度的計算時間

讓我們開始通過使用一個快速和粗暴的方法計算我們的代碼:傳統的 unix time 工具。
 

$ time python yourprogram.pyreal 0m1.028suser 0m0.001ssys 0m0.003s

三個輸出測量值之間的詳細意義在這里 stackoverflow article,但簡介在這:

    real — 指的是實際耗時     user — 指的是內核之外的 CPU 耗時     sys — 指的是花費在內核特定函數的 CPU 耗時

你會有你的應用程序用完了多少 CPU 周期的即視感,不管系統上其他運行的程序添加的系統和用戶時間。

如果 sys 和 user 時間之和小于 real 時間,然后你可以猜測到大多數程序的性能問題最有可能與 IO wait 相關。
用 timing context 管理器細粒度的計算時間

我們下一步的技術包括直接嵌入代碼來獲取細粒度的計時信息。下面是我進行時間測量的代碼的一個小片段

timer.py
 

import time class Timer(object): def __init__(self, verbose=False): self.verbose = verbose  def __enter__(self): self.start = time.time() return self  def __exit__(self, *args): self.end = time.time() self.secs = self.end - self.start self.msecs = self.secs * 1000 # millisecs if self.verbose:  print 'elapsed time: %f ms' % self.msecs

為了使用它,使用 Python 的 with 關鍵字和 Timer 上下文管理器來包裝你想計算的代碼。當您的代碼塊開始執行,它將照顧啟動計時器,當你的代碼塊結束的時候,它將停止計時器。

這個代碼片段示例:
 

from timer import Timerfrom redis import Redisrdb = Redis() with Timer() as t: rdb.lpush("foo", "bar")print "=> elasped lpush: %s s" % t.secs with Timer() as t: rdb.lpop("foo")print "=> elasped lpop: %s s" % t.secs

為了看看我的程序的性能隨著時間的演化的趨勢,我常常記錄這些定時器的輸出到一個文件中。
使用 profiler 逐行計時和分析執行的頻率

羅伯特·克恩有一個不錯的項目稱為 line_profiler , 我經常使用它來分析我的腳本有多快,以及每行代碼執行的頻率:

為了使用它,你可以通過使用 pip 來安裝它:
 

pip install line_profiler            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 容城县| 自贡市| 尉氏县| 呼和浩特市| 井研县| 斗六市| 恩平市| 新巴尔虎左旗| 越西县| 石台县| 灵台县| 元江| 耿马| 宣汉县| 乌兰县| 西贡区| 宁夏| 乌兰浩特市| 札达县| 贺州市| 永安市| 积石山| 闵行区| 扶风县| 吴堡县| 乐都县| 钟祥市| 弥勒县| 稷山县| 宜都市| 措美县| 秦皇岛市| 开原市| 辽中县| 农安县| 文昌市| 汕尾市| 牙克石市| 绥阳县| 海城市| 石柱|