'Run all (can be limited with options) tasks from the config.
:param options: Either an :class:`argparse.Namespace` instance, or a dict, containing options for execution
:param output: If a file-like object is specified here, log messages and stdout from the execution will be
written to it.
:param priority: If there are other executions waiting to be run, they will be run in priority order,
lowest first.
:returns: a list of :class:`threading.Event` instances which will be
set when each respective task has finished running'

def execute(self, options=None, output=None, loglevel=None, priority=1):

    if (options is None):
        options = copy.copy(self.options.execute)
    elif isinstance(options, dict):
        options_namespace = copy.copy(self.options.execute)
        options_namespace.__dict__.update(options)
        options = options_namespace
    task_names = self.tasks
    config_hash = self.hash_config()
    if (self.is_daemon and self.autoreload_config and (self.config_file_hash != config_hash)):
        log.info(u'Config    change    detected.    Reloading.')
        try:
            self.load_config(output_to_console=False, config_file_hash=config_hash)
            log.info(u'Config    successfully    reloaded!')
        except Exception as e:
            log.error(u'Reloading    config    failed:    %s', e)
    if options.tasks:
        if (options.tasks == [u'*']):
            options.tasks = None
        else:
            task_names = []
            for arg in options.tasks:
                matches = [t for t in self.tasks if fnmatch.fnmatchcase(str(t).lower(), arg.lower())]
                if (not matches):
                    msg = (u'`%s`    does    not    match    any    tasks' % arg)
                    log.error(msg)
                    if output:
                        output.write(msg)
                    continue
                task_names.extend((m for m in matches if (m not in task_names)))
            options.tasks = task_names
    task_names = sorted(task_names, key=(lambda t: self.config[u'tasks'][t].get(u'priority', 65535)))
    finished_events = []
    for task_name in task_names:
        task = Task(self, task_name, options=options, output=output, loglevel=loglevel, priority=priority)
        self.task_queue.put(task)
        finished_events.append((task.id, task.name, task.finished_event))
    return finished_events
