def _get_task(domain_id): try: domain = Domain.get_by_id(domain_id) tasks = Task.select().where(~Task.completed, Task.domain.is_null(), Task.cpu_intensity <= domain.mflops, Task.com_intensity <= domain.mpi_bandwidth, Task.mem_intensity <= domain.memory) if GREEDY_TASKS: tasks = sorted( tasks, key=lambda t: _distance( (t.cpu_intensity, t.com_intensity, t.mem_intensity), (domain.mflops, domain.mpi_bandwidth, domain.memory))) task = tasks[0] else: task = tasks.get() task.domain = domain task.assign_date = datetime.now() task.save() return task except Domain.DoesNotExist: abort(Response('Domain not found', 404)) except (Task.DoesNotExist, IndexError): abort(Response('No tasks available', 503))