code: def run(self, hosts, function, attempts=1):
          
          return self._run(hosts, function, self.workqueue.enqueue, attempts)
docs: Add the given function to a queue, and call it once for each host
          according to the threading options.
          Use decorators.bind() if you also want to pass additional
          arguments to the callback function.
  
          Returns an object that represents the queued task, and that may be
          passed to is_completed() to check the status.
  
          :type  hosts: string|list(string)|Host|list(Host)
          :param hosts: A hostname or Host object, or a list of them.
          :type  function: function
          :param function: The function to execute.
          :type  attempts: int
          :param attempts: The number of attempts on failure.
          :rtype:  object
          :return: An object representing the task.