現在、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()