vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 8
声望: 0

操作系统: windows7;
Python环境: Anaconda Python 2.7 32位;
Vn.py框架: v1.9.2 LTS;

报错内容:
eventEngine2.queue存入的Event实例的type_属性为'eOrder.CTP.2',
这些值不在eventEngine2.
handlers字典的key中,
导致__queue队列很多数据没有处理、队列变大等等.

问题:
这是不是个bug?建议怎么解决?

Administrator
avatar
加入于:
帖子: 1468
声望: 68

请提供英文原版的报错内容。。。

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

谢谢您的回复,报错内容如下:

datetime.now()
datetime.datetime(2019, 4, 25, 22, 36, 49, 54000)
ee.__queue.qsize()
1124

datetime.now()
datetime.datetime(2019, 4, 25, 22, 39, 30, 990000)
ee.__queue.qsize()
1642

z1 = ee._queue.get()
z1.type
= 'eTick.rb1910'

z2 = ee._queue.get()
z2.type
= 'eOrder.CTP.2'

还得麻烦您指点迷津!!

Administrator
avatar
加入于:
帖子: 1468
声望: 68

如果queue的大小只增加,不减少,只可能是没有启动EventEngine,导致事件没有处理持续挤压导致的。

否则运行过程中即使没有注册处理函数,该事件的数据也会被抛弃掉,不会继续保存着

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

非常感谢您的回复。

我用active属性确认了下EventEngine是否启动,结果如下:
ee.
active
True

handlers的key确认了下注册的事件类型,结果如下:
ee.
handlers.keys()
['eError.', 'eOrder.', 'eTimer', 'eContract.', 'eLog', 'eTick.', 'ePosition.', 'eTrade.', 'eAccount.']

正如开头咨询的那样, 上面z1、z2的类型('eTick.rb1910'、'eOrder.CTP.2')并没有在ee.handlers的字典中, 也就不会被处理,
是不是这个原因导致EventEngine.
queue队列一直变大?

Administrator
avatar
加入于:
帖子: 1468
声望: 68

不会,没有注册处理函数的事件会直接被抛弃,不会在队列里呆着不处理。

还有种情况就是看是不是有处理函数耗时太长,导致事件处理线程阻塞卡住

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

谢谢,我再想想、测试下。

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