def __iter__(self): first_pk, last_pk = self.get_first_and_last() if first_pk <= last_pk: comp = operator.le # <= direction = 1 else: comp = operator.ge # >= direction = -1 current_pk = first_pk db_alias = self.queryset.db status = GlobalStatus(db_alias) self.init_progress(direction) while comp(current_pk, last_pk): status.wait_until_load_low(self.status_thresholds) start_pk = current_pk current_pk = current_pk + self.chunk_size * direction # Don't process rows that didn't exist at start of iteration if direction == 1: end_pk = min(current_pk, last_pk + 1) else: end_pk = max(current_pk, last_pk - 1) with StopWatch() as timer, self.maybe_atomic(using=db_alias): if direction == 1: chunk = self.queryset.filter(pk__gte=start_pk, pk__lt=end_pk) else: chunk = self.queryset.filter(pk__lte=start_pk, pk__gt=end_pk) # Attach the start_pk, end_pk onto the chunk queryset so they # can be read by SmartRangeIterator or other client code chunk._smart_iterator_pks = (start_pk, end_pk) yield chunk self.update_progress(direction, chunk, end_pk) self.adjust_chunk_size(chunk, timer.total_time) self.end_progress()
def __iter__(self): min_pk, max_pk = self.get_min_and_max() current_pk = min_pk db_alias = self.queryset.db status = GlobalStatus(db_alias) self.init_progress() while current_pk <= max_pk: status.wait_until_load_low(self.status_thresholds) start_pk = current_pk current_pk = current_pk + self.chunk_size # Don't process rows that didn't exist at start of iteration end_pk = min(current_pk, max_pk + 1) with StopWatch() as timer, self.maybe_atomic(using=db_alias): chunk = self.queryset.filter(pk__gte=start_pk, pk__lt=end_pk) yield chunk self.update_progress(chunk=chunk, end_pk=end_pk) self.adjust_chunk_size(chunk, timer.total_time) self.end_progress()
def test_other_databases(self): status = GlobalStatus(using='other') running = status.get('Threads_running') assert isinstance(running, int) assert running >= 1
def test_other_databases(self): status = GlobalStatus(using='other') running = status.get('Threads_running') self.assertTrue(isinstance(running, int)) self.assertGreaterEqual(running, 1)