使用cProfile針對回測進行效能分析,和結合說下提速思路
昨天再研究lru_cache快取讀取回測最佳化時候,使用了效能分析工具cProfile,發現還是非常強力的分析工具,這裡做個簡單介紹。並結合說下一些策略提速思路。
關於cProfile使用這個文章寫的很詳細,
https://www.cnblogs.com/btchenguang/archive/2012/02/03/2337112.html 。 這裡我簡單接受下。
安裝
不用安裝,python一般自帶都有的,
使用
使用方法有幾個,我是直接輸出。就是把回測程式碼放在一個方法裡面,比如runBackTesting()裡面。然後再main方法按照下面程式碼跑,這裡是按照累計時間排序的。提示,最好註釋掉Matplot影像輸出,因為互動的時間也是統計的。
if __name__ == '__main__': cProfile.run("runBackTesting()", sort="cumulative")
效能分析結果
如下圖所示
- 第一行 是總共呼叫function次數,和總執行時間次數
- 下面列的說明
- ncalls:表示函式呼叫的次數;
- tottime:表示指定函式的總的執行時間,除掉函式中呼叫子函式的執行時間;
- percall:(第一個percall)等於 tottime/ncalls;
- cumtime:表示該函式及其所有子函式的呼叫執行的時間,即函式開始呼叫到返回的時間;
- percall:(第二個percall)即函式執行一次的平均時間,等於 cumtime/ncalls;
- filename:lineno(function):每個函式呼叫的具體資訊;前面是檔名,第幾行,後面是方法名,有些方法比如max,min這些就沒有檔名了。
一些分析
一般關注兩個ncalls,和cumtime。這裡結合說下一些提速思路
- 通常ncalls如果只有一兩次,但是cumtime很長;這些通常是硬碟IO讀取一類,只能儘量減少這些次數。
- ncalls次數很多,而且cumtime不低的,是最佳化重點,可以看到主要是bar回溯。如果vnpy自帶改進思路不是很多。如果是自己的onBar方法,儘量減少裡面運算,可以放在條件判斷下的,先放進去。
比如self.pos == 0, self.pos <> 0: 這樣。 - 在不會缺少資料的前提下,儘量減少ArrayManager中的長度,比如ArrayManager(50),比預設100少一半。
- 使用快取或者固化資料,我自己定義了一個方法atrlog,發現用時很多,檢查發現實在每次呼叫時候要用三次np.log去計算high, low, close的對數值;這裡我索性一次過把所有歷史資料在讀取時候就把歷史資料對數化放到cache裡面。減少了耗時。
當然還有很多,只是一些我的思路,其他最佳化可以見專業文章。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2660175/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Forrester:針對預測分析能力進行架構規劃REST架構
- 利用LoadRunner進行效能測試和結果分析(連載一)
- 利用LoadRunner進行效能測試和結果分析(連載二
- 對node工程進行壓力測試與效能分析
- Docker中使用Xhprof 對程式碼進行效能分析Docker
- 使用pprof進行效能分析
- 針對使用非塊執行和塊執行併發壓測對比
- 使用python對oracle進行簡單效能測試PythonOracle
- 使用tpcc-mysql對mysql進行TPCC效能測試MySql
- 使用Business Events和Business Monitor對感測器資料進行智慧分析
- [雪峰磁針石部落格]使用jython進行dubbo介面及ngrinder效能測試
- Python——cProfile(程式分析)Python
- 對比Elasticsearch,使用Doris進行高效日誌分析(下)Elasticsearch
- ORACLE 使用TRACE進行SQL效能分析OracleSQL
- 【java】使用jprofiler進行效能測試Java
- 使用VisualVM對JAVA程式進行效能分析及調優LVMJava
- 【效能優化】消除行連結和行遷移的思路和方法優化
- HttpClientFactory 使用說明 及 對 HttpClient 的回顧和對比HTTPclient
- 【資料分析】針對家庭用電資料進行時序分析(1)
- Linux 下使用 dd 命令進行硬碟 I/O 效能檢測Linux硬碟
- 使用 Dynatrace 對 Node.js 應用的效能資料進行分析Node.js
- 【效能最佳化】消除行連結和行遷移的思路和方法
- 什麼情況下進行效能測試
- 使用 Sysbench 進行 Linux 效能測試Linux
- 騰訊回應:正配合監管進行合規檢測YQ
- 使用JRockit Mission Control進行效能分析和調優
- Rasa中使用lookup table時針對中文對RegexEntityExtractor進行修改
- 【Android】【MonkeyDemons】針對性的進行穩定性測試Android
- 【轉】【效能最佳化】消除行連結和行遷移的思路和方法
- 使用應用程式跟蹤對效能改變進行量化分析(轉)
- 效能測試-服務端瓶頸分析思路服務端
- 使用 XDebug + Webgrind 進行 PHP 程式效能分析WebPHP
- 使用DBMS_PROFILER進行PL/SQL效能分析SQL
- 使用Iperf工具進行網路效能測試
- 使用YCSB工具工具進行cassandra效能測試
- 使用QTP進行WEB頁面效能測試QTWeb
- Electron結合React和TypeScript進行開發ReactTypeScript
- 針對 “測試用例最佳實踐” 的說明