摘要:本文的原文是我有一個負責一個長期運行任務的腳本。因為我想知道該腳本的大部分工作是在與哪個慢的外部系統進行通信。有一個非常好用的內建的分析器來回答這類問題。分析器基礎用法非常簡單。更好的解決方案是把數據到文件中然后使用來分析它。
本文的原文是:Profiling Python Scripts
我有一個負責一個長期運行任務的 Python 腳本。這個腳本同其他三個系統通信 - 它從系統 #1 和 #2 讀取數據,合并它們然后再把它們推送到系統 #3。這是下面的描述。問題是遷移運行在我不滿意的一個地方。因為我想知道該腳本的大部分工作是在與哪個慢的外部系統進行通信。Python 有一個非常好用的內建的分析器來回答這類問題。按照這篇文章來學習如何使用它。
分析器(Profiler)基礎用法非常簡單。假設你有一個 myscript.py。使用 profiler 運行它,你需要做的是:
$ python -m cProfile -o profile.out myscript.py
它將運行這個腳本并且 dump 這個 debug 數據到 profile.out。你也可以省略 -o profile.out 來讓統計的 dumped 到腳本最后的 stdout。
Subprocesses如果你的腳本使用了任何 subprocesses,事情就會變得有點復雜。以我來說,我對腳本的主流程不感興趣 - 它所做的所有事情就是派生(spawn)一些 worker 子進程。我感興趣的是在 worker 中發生了什么。
讓我們假設你的代碼與此類似:
import multiprocessing import time def worker(num): time.sleep(3) print "Worker:", num if __name__ == "__main__": for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) p.start()
你需要引入另外一個間接層:
import multiprocessing import cProfile import time def worker(num): time.sleep(3) print "Worker:", num def profile_worker(num): cProfile.runctx("test(num)", globals(), locals(), "profile-%d.out" %num) if __name__ == "__main__": for i in range(5): p = multiprocessing.Process(target=profile_worker, args=(i,)) p.start()
就是這樣。這個腳本運行之后,你將得到 profile-0.out 到 profile-4.out 這4個文件。
讀取分析數據如果你忽略 -o profile.out 這時將在 stdout 得到統計數據。這不是一個完美的解決方案。更好的解決方案是把數據 dump 到文件中然后使用 runsnake 來分析它。為了在 ubuntu 上安裝它,你需要 wxpython 包,然后你才可以使用 easy-install 安裝它。
$ sudo apt-get install python-wxgtk2.8 python-wxtools wx2.8-doc wx2.8-examples wx2.8-headers wx2.8-i18n $ sudo easy-install SquareMap RunSnakeRun
由于某種原因我沒有在 virtualenv 中運行工作。我需要一個全系統的 easy-install。有人抱怨缺失了 wx 模塊。我的系統是 ubuntu 12.04。
然后,就很簡單了:
$ runsnake profile.out
你在不同的函數獲得了很好的統計分析,調用次數和累計時間。這些數據可以告訴你關于你 app 的很多東西。以我而言我獲悉了與其中一個系統通信花費了 90% 的時間。從那里開始我可以優化它。
來源
http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script
http://stackoverflow.com/questions/11041683/python-multiprocess-profiling
http://www.vrplumber.com/programming/runsnakerun/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45357.html
摘要:調試器可幫助程序員分析完整的代碼。我們將使用標準庫中的模塊調試我們的腳本。例外是程序執行期間發生的錯誤。設置斷點并檢查堆棧幀,并列出源代碼。輸入以繼續調試。分析和計時程序分析程序意味著測量程序的執行時間。的模塊用于分析程序。 showImg(https://segmentfault.com/img/remote/1460000018807029?w=902&h=442); 來源 | ...
摘要:我發現我的粉絲量漲的很慢,這次厚臉皮要波關注。這次做的是一個小巧的游戲腳本,本質上它可以用于任意的電腦與手機游戲。分析這個游戲是上的別猜百塊兒,意思就是讓咱們只踩黑塊,然后會給我們彈一手音樂。越趨近于說明顏色越黑。 目錄 前言 分析(x0) 分析(x1) ????????那么如何去確定這個像...
摘要:內存泄漏往往發生在即使該對象不再使用的時候,你的程序還持有對該對象的引用。最快速發現內存泄漏的方式就是使用一個由編寫的非常好的稱為的工具。通過這些工具和技術的武裝,你應該可以獲取所有要求追蹤大多數內存泄漏以及在程序快速識別瓶頸的信息。 注: 本文的原作者是 Huy Nguyen ,原文地址為 A guide to analyzing Python performance 雖然...
摘要:函數將單元格內容以形式呈現。自動評論代碼自動注釋單元格中的選定行,再次命中組合將取消注釋相同的代碼行。如果需要恢復整個已刪除的單元格,請按或撤消刪除單元格。 showImg(https://segmentfault.com/img/remote/1460000019599210); 編譯:小七、蔣寶尚 一些小提示和小技巧可能是非常有用的,特別是在編程領域。有時候使用一點點黑客技術,既可...
摘要:數據科學其實就是機器學習,數據分析和數據可視化。機器學習通過實現算法,該算法能夠自動檢測輸入中的模式。一般應用于人臉識別語音識別熱門機器學習算法包括神經網絡深度學習支持向量機隨機森林進行數據分析可視化進行數據可視化時,是非常熱門的庫。 ...
閱讀 1049·2021-10-11 10:59
閱讀 3602·2021-09-26 09:55
閱讀 892·2019-08-30 15:55
閱讀 2650·2019-08-30 15:44
閱讀 434·2019-08-30 14:06
閱讀 680·2019-08-30 11:26
閱讀 3337·2019-08-30 10:49
閱讀 2466·2019-08-29 12:53