docs: def push(self, task, func, *args, **kwargs):
          """
          Pushes a configured task onto the queue.
  
          Typically, you'll favor using the ``Gator.task`` method or
          ``Gator.options`` context manager for creating a task. Call this
          only if you have specific needs or know what you're doing.
  
          If the ``Task`` has the ``async = False`` option, the task will be
          run immediately (in-process). This is useful for development and
          in testing.
  
          Ex::
  
              task = Task(async=False, retries=3)
              finished = gator.push(task, increment, incr_by=2)
  
          :param task: A mostly-configured task
          :type task: A ``Task`` instance
  
          :param func: The callable with business logic to execute
          :type func: callable
  
          :param args: Positional arguments to pass to the callable task
          :type args: list
  
          :param kwargs: Keyword arguments to pass to the callable task
          :type kwargs: dict
  
          :returns: The ``Task`` instance
          """
          task.to_call(func, *args, **kwargs)
          data = task.serialize()
  
          if task.async:
              task.task_id = self.backend.push(
                  self.queue_name,
                  task.task_id,
                  data
              )
          else:
              self.execute(task)
  
          return task