'Schedule the given task to run later.
If first is True, the task will be the next to run.
This method does not protect you from scheduling the same Task more
than once, which you probably really don\'t want to do.
If you are scheduling an existing Task (waking it) from another Task,
you should either implement your own logic to ensure that you don\'t
schedule it multiple times, or you should just use schedule().
If you are scheduling an existing Task (waking it) from any thread
besides the one the scheduler is running on, there\'s a race condition
which makes it nontrivial to ensure that multiple schedulings never
happen, and you should just use schedule() for such Tasks.
If you are scheduling a new Task that you just created, this method
is always safe.'

def fast_schedule(self, task, first=False):

    assert (task not in self._ready)
    if first:
        self._ready.appendleft(task)
    else:
        self._ready.append(task)
    self._event.set()
