VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 14
声望: 0

先看测试代码和现象:

description

description

通过断点追踪,发现这个异常是timer事件。
该函数是为了事件接收,为何不阻塞等待,目前是超时1s退出。
我本地尝试改成阻塞等待就正常了,但不知为何抛出空异常。

Member
avatar
加入于:
帖子: 14
声望: 0

看网上的解释好像不需要timeout参数。

description

我直接把timeout=1去掉了,看起来像是正常了。希望群主帮忙释疑。

description

Member
avatar
加入于:
帖子: 716
声望: 62

timeout相当于一个定时器,最多等待一秒,去除后就会无限等待,直到队列中可以取数为止,所以就没有empty报错了。代码前后的try...except...的作用就是接受报错,会先尝试try中的代码,如果出现错误就会去看except后面的错误类型,如果两者一致或者except后没有填写具体的错误类型,则执行except后的语句,在这里就是pass,也就是跳过。所以这里的逻辑是在一个死循环中,尝试取队列中的事件,如果没有则等待1秒,如果还是没有则进入下一次循环。这里其实目的是每隔1秒检查self.active是否为真,即程序是否还在运行,如果程序停止,则self.active会变成假,就不会再运行此函数。你改完后当程序使用stop退出后,这里仍然会堵塞住。

Administrator
avatar
加入于:
帖子: 4502
声望: 321

楼上正解

Member
avatar
加入于:
帖子: 14
声望: 0

多谢

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】