国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

分析 Python 腳本

qpwoeiru96 / 1784人閱讀

摘要:本文的原文是我有一個負責一個長期運行任務的腳本。因為我想知道該腳本的大部分工作是在與哪個慢的外部系統進行通信。有一個非常好用的內建的分析器來回答這類問題。分析器基礎用法非常簡單。更好的解決方案是把數據到文件中然后使用來分析它。

  

本文的原文是: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.outprofile-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

相關文章

  • 調試和分析Python腳本

    摘要:調試器可幫助程序員分析完整的代碼。我們將使用標準庫中的模塊調試我們的腳本。例外是程序執行期間發生的錯誤。設置斷點并檢查堆棧幀,并列出源代碼。輸入以繼續調試。分析和計時程序分析程序意味著測量程序的執行時間。的模塊用于分析程序。 showImg(https://segmentfault.com/img/remote/1460000018807029?w=902&h=442); 來源 | ...

    wenzi 評論0 收藏0
  • 說我菜?那好,我用Python制作電腦與手機游戲腳本來贏你

    摘要:我發現我的粉絲量漲的很慢,這次厚臉皮要波關注。這次做的是一個小巧的游戲腳本,本質上它可以用于任意的電腦與手機游戲。分析這個游戲是上的別猜百塊兒,意思就是讓咱們只踩黑塊,然后會給我們彈一手音樂。越趨近于說明顏色越黑。 目錄 前言 分析(x0) 分析(x1) ????????那么如何去確定這個像...

    PascalXie 評論0 收藏0
  • Python 性能分析入門指南

    摘要:內存泄漏往往發生在即使該對象不再使用的時候,你的程序還持有對該對象的引用。最快速發現內存泄漏的方式就是使用一個由編寫的非常好的稱為的工具。通過這些工具和技術的武裝,你應該可以獲取所有要求追蹤大多數內存泄漏以及在程序快速識別瓶頸的信息。 注: 本文的原作者是 Huy Nguyen ,原文地址為 A guide to analyzing Python performance 雖然...

    TesterHome 評論0 收藏0
  • 收藏 | 10個可以快速用Python進行數據分析的小技巧

    摘要:函數將單元格內容以形式呈現。自動評論代碼自動注釋單元格中的選定行,再次命中組合將取消注釋相同的代碼行。如果需要恢復整個已刪除的單元格,請按或撤消刪除單元格。 showImg(https://segmentfault.com/img/remote/1460000019599210); 編譯:小七、蔣寶尚 一些小提示和小技巧可能是非常有用的,特別是在編程領域。有時候使用一點點黑客技術,既可...

    silvertheo 評論0 收藏0
  • Python說簡單真的簡單,說難也難,就由過來人給你總結為什么吧。

    摘要:數據科學其實就是機器學習,數據分析和數據可視化。機器學習通過實現算法,該算法能夠自動檢測輸入中的模式。一般應用于人臉識別語音識別熱門機器學習算法包括神經網絡深度學習支持向量機隨機森林進行數據分析可視化進行數據可視化時,是非常熱門的庫。 ...

    HtmlCssJs 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<