你的VNPY开源量化平台够快吗?性能对比测试
请实时关注项目更新,微信搜索“VNPY官方”
上次我们说了pyinstaller打包VNPY客户端的方法,本文说一说后起之秀Nuitka的打包VNPY Python开源量化客户打方法。
由于程序运行需要保持目录完整性,所以无论是采用 pyinstaller还是 Nuitka打包, 在打包参数选择的时候,打包成目录即可,而不要打包成单独的exe程序 。Nuitka和其他方案不同的是,Nuitka是静态编译, 对比其他大部分打包工具,Nuitka则是完全的编译工具,编译后的可执行文件已经不需要字节码解释了, 都是调用dll内 API 实现各种功能。 打包前,都需要安装VC2015及以上版本,或MinGW。 安装Nuitka pip install nuitka
如果要完全脱离python环境,可以使用命令行 Nuitka 打包指令: nuitka --follow-import --standalone –icon=app_icon.ico vntrader.py
打包后保存在 vntrader.dist 目录 对于VNTrader这样依赖项较多的Python 开源项目,采用Nuitka 打包时间是更彻底的转C代码,所以打包时间更慢,实际操作中Nuitka打包时间是pyinstaller的数倍.。 nuitka的打包过程,更复杂,需要处理更多工作,需要等待较长时间。 当然nuitka 打包后性能也会优于pyinstaller。
虽然 nuitka 和 pyinstaller这2个打包工具,都会将python代码转化为C代码,并进行编译,但nuitka是可以指定某些库是不要再经过编译的,比如numpy,jinja2,matplotlib,scipy,sqlalchemy,pandas,pygal,pyzbar,win32com 这些,这些库本身已经做了优化,如果被 nuitka 转换为C代码重新编译 ,只会降低速度, 所以打包时指令可以改为 : nuitka --follow-import --standalone –icon=vnpy.ico --recurse-not-to=numpy,jinja2,matplotlib,scipy,sqlalchemy,pandas,pygal,pyzbar,win32com vntrader.py 这样就实现了以上这些库让打包好的exe文件夹内的python3x.dll来执行,不用去理会各个模块的版本依赖和江湖恩怨,实现高度自治,而我们自己开发的模块,以及UI界面和数据库的连接以及函数和功能实现,需要加密和快速反应的, 就借助Nuitka来实现转C代码重新编译优化。
这样处理,编译速度不仅更快,而且性能也更高。
Nuitka可将python代码转换为C++,然后编译为 可执行程序,其通过直接调用python的api的方式实现从解析语言到编译语言的转换,并且在转换到C++的过程中直接使用python的解释器,可以保证100%的语法兼容。
|