把深度行情推入queue队列的问题

发布时间 2023-08-29 17:18:15作者: C羽言

深度行情是一个对象,把对象推入queue队列,传的是引用,内部的值会变化。

mddata = Queue()
#回调中写入Queue
def OnRtnDepthMarketData(self, pDepthMarketData):
    mddata.put(pDepthMarketData)
    
#另起线程死循环从Queue中拿数据
def storedata():
    i = 0
    while True:
        i += 1
        d = mddata.get()
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)
        print(i, d.InstrumentID)

输出的结果如下,i没变,说明在一个循环里的同一个属性,值却在不断变化,还有空值。

#输出的结果如下
1 wr2310
1 wr2310
1 wr2310
1 wr2310
1 bc2310
1 ec2404
1 ec2404
1 ec2404
1 TL2312
1 
1

解决方案:

一般的对象,进行深拷贝就能解决问题,copy.deepcopy(object) 但是CTP获取到的pDepthMarketData并不能进行深拷贝。所以还是直接获取数据组装成列表或字典再推入到队列里。