def run_scheduler(self): while True: num_remaining = Task.objects.filter(type='classify_images', status='P').count() if num_remaining: logger.info('{} photos remaining for classification'.format( num_remaining)) process_classify_images_tasks() sleep(1)
def handle(self, *args, **options): self.import_photos(options['paths']) ensure_raw_processing_tasks() process_raw_tasks() process_generate_thumbnails_tasks() redis_lock.reset_all(r) process_classify_images_tasks() self.handleLocaltion() self.handleObject()
def test_tasks_created_updated(photo_fixture_snow): # Task should have been created for the fixture task = Task.objects.get(type='ensure_raw_processed', status='P', subject_id=photo_fixture_snow.id) assert (timezone.now() - task.created_at).seconds < 1 assert (timezone.now() - task.updated_at).seconds < 1 assert task.started_at == None assert task.finished_at == None # Test manually starting makes intended changes task.start() assert task.status == 'S' assert (timezone.now() - task.started_at).seconds < 1 # Undo last changes task.status = 'P' task.started_at = None task.save() # Calling this function should complete the task and queue up a new one for generating thumbnails ensure_raw_processing_tasks() task = Task.objects.get(type='ensure_raw_processed', subject_id=photo_fixture_snow.id) assert task.status == 'C' assert (timezone.now() - task.started_at).seconds < 1 assert (timezone.now() - task.finished_at).seconds < 1 # Check next task has been created task = Task.objects.get(type='generate_thumbnails', subject_id=photo_fixture_snow.id) assert task.status == 'P' assert (timezone.now() - task.created_at).seconds < 1 assert (timezone.now() - task.updated_at).seconds < 1 assert task.started_at == None assert task.finished_at == None # Process tasks to generate thumbnails which should add new task for classification process_generate_thumbnails_tasks() task = Task.objects.get(type='generate_thumbnails', subject_id=photo_fixture_snow.id) assert task.status == 'C' assert (timezone.now() - task.started_at).seconds < 10 assert (timezone.now() - task.finished_at).seconds < 1 # Chekc next task has been added to classify images task = Task.objects.get(type='classify_images', subject_id=photo_fixture_snow.id) assert task.status == 'P' assert (timezone.now() - task.created_at).seconds < 1 assert (timezone.now() - task.updated_at).seconds < 1 assert task.started_at == None assert task.finished_at == None # Processing the classification task should create child processes assert task.complete_with_children == False assert task.status == 'P' process_classify_images_tasks() task = Task.objects.get(type='classify_images', subject_id=photo_fixture_snow.id) assert task.status == 'S' assert task.children.count() == 4 assert task.complete_with_children == True # Completing all the child processes should set the parent task to completed for child in task.children.all(): assert child.status == 'P' child.start() assert task.status == 'S' assert child.status == 'S' child.complete() assert child.status == 'C' assert task.status == 'C'