使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 OSProfiler 對 OpenStack 進行效能測量
- Docker中使用Xhprof 對程式碼進行效能分析Docker
- 對node工程進行壓力測試與效能分析
- 使用python對oracle進行簡單效能測試PythonOracle
- 使用pprof進行效能分析
- 針對使用非塊執行和塊執行併發壓測對比
- 使用 jMeter 對 SAP Spartacus 進行併發效能測試JMeter
- [雪峰磁針石部落格]使用jython進行dubbo介面及ngrinder效能測試
- 使用Loadrunner進行效能測試
- Python——cProfile(程式分析)Python
- 對比Elasticsearch,使用Doris進行高效日誌分析(下)Elasticsearch
- 使用 Sysbench 進行 Linux 效能測試Linux
- Rasa中使用lookup table時針對中文對RegexEntityExtractor進行修改
- HttpClientFactory 使用說明 及 對 HttpClient 的回顧和對比HTTPclient
- Laradock 下使用 Tideways_xhprof+Xhgui 進行效能分析 —— 安裝篇IDEGUI
- 【資料分析】針對家庭用電資料進行時序分析(1)
- 使用 XDebug + Webgrind 進行 PHP 程式效能分析WebPHP
- 使用 Dynatrace 對 Node.js 應用的效能資料進行分析Node.js
- 什麼情況下進行效能測試
- 效能測試-服務端瓶頸分析思路服務端
- Appium自動化(15) - 針對 webview 進行自動化測試APPWebView
- 測試前奏 之 Robotium使用Eclipse和ADT對apk進行黑盒測試EclipseAPK
- 利用perf進行效能分析
- 如何進行裝置的非對稱效能測試
- 影像分析,使用Halcon進行缺陷檢測
- Electron結合React和TypeScript進行開發ReactTypeScript
- 針對 “測試用例最佳實踐” 的說明
- 使用火焰圖進行Java應用效能分析Java
- 如何使用jMeter對某個OData服務進行高併發效能測試JMeter
- 【效能測試】常見的效能問題分析思路(二)案例&技巧
- 如何使用Tushare+ Backtrader進行股票量化策略回測
- 使用VisualVM進行Java應用的效能測量LVMJava
- 騰訊回應:正配合監管進行合規檢測YQ
- 效能測試工具Lmbench的使用和下載
- 第 83 期對 Go 程式進行可靠的效能測試Go
- 使用 locust 對 mysql 語句進行壓測MySql
- 何時適合進行自動化測試?(下)
- 【效能測試】常見的效能問題分析思路(一)道與術