def blocklist_stations(self, moving): moving_keys = [] new_block_values = [] for station_key, block in moving: moving_keys.append(station_key) if block: block.time = self.utcnow block.count += 1 else: block_key = CellBlocklist.to_hashkey(station_key) new_block_values.append(dict( time=self.utcnow, count=1, **block_key.__dict__ )) if new_block_values: # do a batch insert of new blocks stmt = CellBlocklist.__table__.insert( mysql_on_duplicate='time = time' # no-op ) # but limit the batch depending on each model ins_batch = CellBlocklist._insert_batch for i in range(0, len(new_block_values), ins_batch): batch_values = new_block_values[i:i + ins_batch] self.session.execute(stmt.values(batch_values)) if moving_keys: self.stats_client.incr( 'data.station.blocklist', len(moving_keys), tags=['type:%s' % self.station_type, 'action:add', 'reason:moving']) self.remove_task.delay(moving_keys)