最近这两天我的实盘量化程序经常会出现调度器任务超时的问题,每天一回家看控制台,发现成堆的任务超时提示,一开始没有上心,持续发生两三次以后感觉是有些异常,于是趁着周末有时间,看一下问题到底出在哪里。
出现问题这段时间,实盘主程序的代码一直没有变化,开始我以为是电脑windows升级后出现的问题,换了几个电脑后发现不对,不管哪个环境下,都是一样的规律性出现调度任务超时,后来把注意力放在了电脑的电池模式上,会不会因为实盘是在笔记本上执行的,电池问题导致算力出问题了?一通排查后这个想法也不成立。被调度的任务执行时间才0.1秒多一点,说什么也不会因为这个导致超时(主循环sleep是5秒)
没办法,我开始在调度器里各个角落添加print代码,打印每一步的执行和变量变化,通过这个步骤,我发现延时的情况发生在调用接口获取实时价格这个步骤前,每1分钟都会在这里触发一次延时。于是我换了一个备用接口观察效果,这次问题依然存在,但任务超时发生的规律改变了,之前是每1分钟里,在一个固定秒数,比如47秒这个时间点就会触发一次,调整接口后,问题依然存在,但触发的时间间隔规律改变了。看来问题大概率就出在这里。
于是我把实时价格手动固定赋值了一套变量,实时价格不再用爬虫从网络上实时获取,于是问题消失了。现在明确了问题所在,就是接口价格的获取出现了问题(虽然没有触发异常)。
一个值得欣慰的是,不是代码出现问题导致的,一个无奈的是,这个问题我无法解决,数据源我猜测在调用频率上应该较过去有些变化或者限制,导致问题发生。好在这个问题影响不是太大,就是会在每分钟里,触发一次任务延时5秒,整体来讲算是虽然有影响,但不是很大。
一下午的时间都耗在这上面了,顺手记录一下。
文章评论