diff --git a/artiq/frontend/artiq_client.py b/artiq/frontend/artiq_client.py index 7499412b0..78e4a49ac 100755 --- a/artiq/frontend/artiq_client.py +++ b/artiq/frontend/artiq_client.py @@ -138,8 +138,8 @@ def _show_schedule(schedule): clear_screen() if schedule: l = sorted(schedule.items(), - key=lambda x: (x[1]["due_date"] or 0, - -x[1]["priority"], + key=lambda x: (-x[1]["priority"], + x[1]["due_date"] or 0, x[0])) table = PrettyTable(["RID", "Pipeline", " Status ", "Prio", "Due date", "File", "Experiment", "Arguments"]) diff --git a/artiq/gui/schedule.py b/artiq/gui/schedule.py index f8cbb9d36..459547f86 100644 --- a/artiq/gui/schedule.py +++ b/artiq/gui/schedule.py @@ -17,8 +17,8 @@ class _ScheduleModel(DictSyncModel): parent, init) def sort_key(self, k, v): - # order by due date, and then by priority and RID - return (v["due_date"] or 0, -v["priority"], k) + # order by priority, and then by due date and RID + return (-v["priority"], v["due_date"] or 0, k) def convert(self, k, v, column): if column == 0: diff --git a/artiq/master/scheduler.py b/artiq/master/scheduler.py index 30c69352b..85815209b 100644 --- a/artiq/master/scheduler.py +++ b/artiq/master/scheduler.py @@ -81,14 +81,16 @@ class Run: self._notifier[self.rid]["status"] = self._status.name # The run with the largest priority_key is to be scheduled first - def priority_key(self, now): + def priority_key(self, now=None): if self.due_date is None: - overdue = 0 due_date_k = 0 else: - overdue = int(now > self.due_date) due_date_k = -self.due_date - return (overdue, self.priority, due_date_k, -self.rid) + if now is not None and self.due_date is not None: + runnable = int(now > self.due_date) + else: + runnable = 1 + return (runnable, self.priority, due_date_k, -self.rid) @asyncio.coroutine def close(self): @@ -240,10 +242,9 @@ class RunStage(TaskObject): next_irun = asyncio_queue_peek(self.inq) except asyncio.QueueEmpty: next_irun = None - now = time() if not stack or ( next_irun is not None and - next_irun.priority_key(now) > stack[-1].priority_key(now)): + next_irun.priority_key() > stack[-1].priority_key()): stack.append((yield from self.inq.get())) run = stack.pop()