python量化方案_Python高效量化之多线程的改进方案——多进程

上一节说了多线程编程的相关问题,当然我在写自己这套交易系统的时候,刚开始使用的就是多线程的方式来实现具体的操作,包括订单处理,行情数据的拉取等。

但是由于网络的延迟、 python对于网络解析和多线程的切换效率问题导致我在高频抢订单的过程中出现了很多奇奇怪怪的问题。

针对问题的产生以及对应的解决方案我罗列出了很多种情况:网络延迟的优化:开始没在意过服务器的问题,当我发现网络延迟最大的时候可以达到300多毫秒甚至1秒左右的时候我着重研究了一下相关的问题,并选择了距离交易所服务器很近或者是同机房的服务器。因为做的是数字货币交易,后来还用过交易所的colocation,最终我可以做到的最大延迟可以控制在30ms左右。这对我来说已经是我能够做到的极限了。

针对python对网络解析比较慢的情况这个目前可选的方案其实有很多,尽量别想着自己去折腾这些东西,GitHub上有很多很好的解决方案。自己折腾花时间不说不一定有很好的效果。我选择的是WebScoekt-client这个库,有测过于C++同时解析相同数据的事件,当时测试的结果,没有很大的区别,因为这个库地层也是使用C++封装的,所以效率依旧很快。

针对python多线程效率低下的问题,我后来使用了线程池,但是始终不算是很好的解决方案。要知道,对于交易系统而言,我们不仅需要尽可能高效的运行,也需要尽可能让服务器发挥到全部的性能,所以我最终的解决方案是,多进程,或者说进程池的方式来实现。

多进程以及进程池:

常规来说,我们在使用进程时,只需要用的时候就创建一个进程就行了,但是从项目管理的角度来说其实这种做法是很不科学的。</

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值