'Schedule the given task to run later.
If first is True, the task will be the next to run.
Unlike fast_schedule(), this method will not schedule a task to run
multiple times.  The one exception is if a Task actually schedules
itself.  The easiest way to avoid this is simply not to do it.
See fast_schedule() and ScheduleTask for more info.'

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

    if (threading.current_thread() is self._thread):
        if (task in self._ready):
            import logging
            logging.getLogger('recoco').info(('Task    %s    scheduled    multiple    ' + 'times'), task)
            return False
        self.fast_schedule(task, first)
        return True
    st = ScheduleTask(self, task)
    st.start(fast=True)
