def process_quote(self, data):
        """报价推送"""
        for ix, row in data.iterrows():
            symbol = row['code']

            tick = self._tick_dict.get(symbol, None)
            if not tick:
                tick = TinyQuoteData()
                tick.symbol = symbol
                self._tick_dict[symbol] = tick

            tick.date = row['data_date'].replace('-', '')
            tick.time = row['data_time']
            # with GLOBAL.dt_lock:
            if tick.date and tick.time:
                tick.datetime = datetime.strptime(' '.join([tick.date, tick.time]), '%Y%m%d %H:%M:%S')
            else:
                return

            tick.openPrice = row['open_price']
            tick.highPrice = row['high_price']
            tick.lowPrice = row['low_price']
            tick.preClosePrice = row['prev_close_price']
            # 1.25 新增摆盘价差，方便计算正确的订单提交价格 要求牛牛最低版本 v3.42.4961.125
            if 'price_spread' in row:
                tick.priceSpread = row['price_spread']

            tick.lastPrice = row['last_price']
            tick.volume = row['volume']

            new_tick = copy(tick)
            self._notify_new_tick_event(new_tick)