深度行情是一个对象,把对象推入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并不能进行深拷贝。所以还是直接获取数据组装成列表或字典再推入到队列里。
标签:InstrumentID,队列,pDepthMarketData,wr2310,queue,print,推入 From: https://www.cnblogs.com/yuyanc/p/17665396.html