发布于VeighNa社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2025-07-19
7月初发布了VeighNa的4.1.0版本,本次更新的主要内容是完成了绝大多数VeighNa开源社区版中的模块移植(接口、应用等),得益于Python 3.13带来的显著性能提升,强烈建议还在使用3.0大版本的用户升级,感受新一代版本带来的性能飞跃。
对于已经安装了VeighNa Studio 4.0版本的用户,可以使用快速更新功能完成自动升级。对于没有安装的用户,请下载\VeighNa Studio-4.1.0**,体验一键安装的量化交易Python发行版,下载链接:
https://download.vnpy.com/veighna_studio-4.1.0.exe
聊聊Python 3.13的性能
关于Python 3.13具体的性能提升水平,社区里已经有许多同学讨论了,这里借着4.1.0发布的机会,对互联网上的公开资料做个整理。
熟悉Python发展历史的同学可能知道,自3.10版本以来,CPython官方团队在性能优化上投入了巨大的精力,几乎每个新版本都是一次“提速”。下面就来回顾一下这几个版本中和性能相关的核心改动,看看3.13版本对比3.10究竟快了多少。
Python 3.11:革命性的性能飞跃
Python 3.11是“Faster CPython”项目第一个取得丰硕成果的版本,其性能相较于3.10有巨大提升。根据官方文档,Python 3.11在标准基准测试套件上比3.10平均快了1.25倍。
主要改进包括:
- PEP 659 - 专业化自适应解释器:这是3.11性能提升的核心。解释器现在可以在运行时将通用的字节码替换为针对特定数据类型的“专业化”版本。例如,对于重复执行的
a + b
操作,如果a
和b
总是整数,解释器会使用专门处理整数加法的快速指令,大大提高了执行效率。 - 更快的启动速度:通过将核心模块的字节码“冻结”在内存中,减少了解析和加载时间,使得Python解释器的启动速度提升了10-15%。
- 更快的函数调用:优化了函数调用过程中的帧(frame)创建和管理,减少了C栈的使用和内存分配,使得纯Python函数调用更加高效。
- 参考来源:What’s New In Python 3.11 - Faster CPython
- 性能数据:Python 3.10 vs Python 3.11 – performance testing
Python 3.12:精益求精的持续优化
Python 3.12延续了3.11的势头,在现有基础上进行了更多细致的优化。虽然不像3.11那样有革命性的飞跃,但它同样带来了稳固的性能增长。3.12的官方文档中没有提及具体的平均性能提升数字,但根据社区测试的结果,Intel平台上对比3.10的平均提升在5%。
主要改进包括:
- 更多的专业化指令:在3.11的基础上,为更多的字节码指令增加了专业化版本,覆盖了更多的代码场景。
- 改进的内存管理:通过优化对象结构和垃圾回收机制,减少了内存开销,从而提高了缓存效率。
- 解释器循环优化:对解释器的主循环(evaluation loop)进行了生成方式的重构,使其更容易维护和优化,并为未来的JIT(Just-In-Time)编译器等更激进的优化铺平了道路。
Python 3.13:异步性能的又一次飞跃
Python 3.13继续沿着性能优化的道路前进,根据社区测试的结果,对比3.12的平均性能提升大约是5%(Intel平台)。
这一版本的改进主要集中在:
- 异步性能大幅提升:对
asyncio
库进行了大量优化,根据基准测试,asyncio
相关任务整体性能提升了\1.19倍**。** - 常用操作加速:许多基础操作,如序列解包(
unpack_sequence
)、生成器(generators
)等都变得更快。 - 为未来铺路:虽然这里不讨论实验性功能,但值得一提的是,3.13的许多改动(如试验性的No-GIL模式、新的JIT编译器框架)都在为未来更大幅度的性能提升奠定基础。
结论:所以到底快了多少?
综合来看,从Python 3.10到3.13,CPython的性能经历了持续且显著的增长。通过将各个版本的性能提升进行串联估算 (1.25 1.05 1.05),我们可以得出一个大致的结论:
Python 3.13的平均性能大约比Python 3.10快35-40%。
对于VeighNa用户而言,这意味着策略回测、实盘交易中涉及的大量纯Python计算逻辑(例如信号计算、交易执行、投研分析等)都将运行得更快,从而降低延迟、提升策略执行效率。因此,我们强烈建议使用开源社区版的用户升级到基于Python 3.13的VeighNa 4.1.0版本,来享受这份免费的“性能午餐”。
CHANGELOG
新增
- vnpy_mcdata新增对于Tick数据查询的支持
- OrderType枚举值增加ETF类型,支持ETF申购和赎回业务
- 增加遗传算法优化函数run_ga_optimization的入参,允许用户控制优化过程中所使用的全部超参
- CTA策略回测引擎,增加对于遗传算法优化函数新入参的支持
调整
- 升级扩展模块适配4.0版本,具体模块列表请参考该页面
- 使用close函数替代unbind,来实现vnpy.rpc模块中zmq.Socket的安全关闭
- 修改PySide6依赖版本为6.8.2.1,解决部分底层warning输出问题
- 修改ta-lib依赖版本为0.6.4,解决Linux和Mac系统的安装问题
- 调整Qt层捕捉到全局异常时的日志输出级别为Critical
- vnpy_datarecorder移除不必要的行情录制异常抛出,改为记录日志
- vnpy_rqdata下载股票数据时,除权方式由pre改为pre_volume
- 数据库模块录制行情数据时,默认跳过extra字段
- vnpy_ib支持10.30.1版本的ibapi,增加对于新版本撤单函数的传参支持
修复
- 修复新版本ta-lib中,MA_Type类不再是枚举值导致的部分指标计算问题
- 修复补全MainEngine缺失的get_tick函数
- 修复邮件发送引擎在使用QQ邮箱时出现的发送后报错问题
- 修复日志模块由于缺失默认gateway_name参数,在Qt层捕捉到全局异常时输出错误的问题
- vnpy_rohon新增Linux安装脚本,解决动态库找不到的问题
- vnpy_rqdata修复品种代码为小写合约的次主力88A2历史数据查询问题