2010-02-07 75 views
9

我想弄清楚如何在我的應用程序中測量幾個python線程的性能。我目前有幾個基於用戶輸入在不同線程上執行的任務,我想測量每個線程的執行時間,甚至是內存消耗。我試圖使用cProfile(在線程的每個實例上,然後我將數據寫入文件,然後彙總所有結果),並取得了有限的成功。另外,我還有一些阻塞IO的問題,這會影響我的結果。無論如何有效地分析我的應用程序?Python線程的剖析

+1

通過使用cProfile,你已經做了一個很好的開始!如果你可以用cProfile更詳細地解釋你的「有限的成功」,我們可以幫助解決這個問題並從那裏繼續。 – KushalP 2010-02-07 22:02:12

+0

作爲一個無關的說明,您可能需要考慮多個進程而不是多個線程:http://en.wikipedia.org/wiki/Global_Interpreter_Lock – badp 2010-02-08 07:42:24

回答

3

有幾種不同的方法來解決這個問題。 cProfile很棒,並附帶Python,但很多人將多線程分析視爲一個問題。解決這個問題的一種方法是對每個線程運行cProfile的單獨實例,然後使用Stats.add合併結果。

如果沒有你期望的那麼有用,另一種方法是使用Yappi,我已經成功使用了幾個特殊的多線程情況。它有很好的文檔,所以你不應該有太多的麻煩設置它。

有關內存特定的性能分析,請查看Heapy。但是請注意,如果你的代碼不好,它可能會創建一些你見過的最大的日誌文件!

+0

我的系統是一個Web服務器,如果我使用'pr = cProfile.Profile() '在不同的請求中,是不是叫做** cProfile **的單獨實例? – user3978288 2017-09-05 08:14:22