def add_new_available_task(self, task: Task, job_id: int): """ Adds the task to the Available Tasks Queue and attaches job id to them :param task: :param job_id: :return: """ task.set_job(job_id) task.set_message_type(TaskMessageType.TASK_RAW) self.available_tasks.put(task) logger.log_trace(f'{self.log_prefix}New Available Task {task.task_id}')
def get_tasks(job_id: int, num_tasks: int): """ fetch task from the queue return this task "formatted" back to slave :param job_id: Integer :param num_tasks: Integer :return Any: """ try: conn_id = request.cookies.get('id') job_check(job_id) tasks: List[Task] = self.task_manager.connect_available_tasks( num_tasks, conn_id) pickled_tasks = pickle_dumps(tasks) compressed_data = compress(pickled_tasks) return create_binary_resp(compressed_data, f'tasks_job_{self.job.job_id}') except NoMoreTasks: if self.status_manager.is_job_done(): job_finished_task = Task(-1, "", [], None, "", "") job_finished_task.set_message_type(TaskMessageType.JOB_END) pickled_tasks = pickle_dumps([job_finished_task]) compressed_data = compress(pickled_tasks) return create_binary_resp(compressed_data, f'job_{self.job.job_id}_done') logger.log_error('Unable to retrieve tasks from manager') return Response(status=500) except JobNotInitialized: return Response(response="Job Not Initialized", status=403) except WrongJob: return Response(response="Wrong Master", status=403) except PicklingError as error: logger.log_error(f'Unable to pickle tasks\n{error}') return Response(status=500) except CompressionException as error: logger.log_error(f'Unable to compress pickled tasks\n{error}') return Response(status=500) except Exception as error: logger.log_error(f'{type(error)} {error}') return Response(status=501)