我目前在尝试让 PyTables 更快地将数据写入自身时遇到了麻烦。让我解释一下我目前的情况。
现在我有通过多播传入的数据,数据率很高。我有一个解析器和一个数据结构,可以将数据散列到字典中,这些字典被发送并存储在 PyTables 中。
我有一个线程接受这个字典,它的键是和 id,它的值是应用于 id 的数据实例数组。线程遍历键值对并将数据添加到与 id 对应的表中。
这是我当前的实现,到目前为止,字典数组充当了随着时间线性增加的缓冲区。这是我明显的问题。该代码显示了编写器线程为写入数据而进行的常量循环。
def acceptDict():
while True:
while not dicts.empty():
lock.acquire()
dictInst = dicts.get()
print dicts.qsize()
for instrument, dataArray in dictInst.iteritems():
if instrument in tableExists:
tableD = openFi.getNode("/t" + str(instrument), "direct")
else:
tableExists[instrument] = 1
group = openFi.createGroup("/", "t" + str(instrument), str(instrument))
tableD = openFi.createTable(group, "direct", Tick, "direct")
for i in dataArray:
tableD.row['timestamp'] = i[0]
tableD.row['side'] = i[1]
tableD.row['level'] = i[2]
tableD.row['price'] = i[3]
tableD.row['quant'] = i[4]
tableD.row['orders'] = i[5]
tableD.row.append()
tableD.flush()
lock.release()