def reschedule(cls, base_path, mapreduce_spec, serial_id, queue_name=None):
    """Schedule new update status callback task.

    Args:
      base_path: mapreduce handlers url base path as string.
      mapreduce_spec: mapreduce specification as MapreduceSpec.
      serial_id: id of the invocation as int.
      queue_name: The queue to schedule this task on. Will use the current
        queue of execution if not supplied.
    """
    task_name = ControllerCallbackHandler.get_task_name(
        mapreduce_spec, serial_id)
    task_params = ControllerCallbackHandler.controller_parameters(
        mapreduce_spec, serial_id)
    if not queue_name:
      queue_name = os.environ.get("HTTP_X_APPENGINE_QUEUENAME", "default")

    try:
      taskqueue.Task(url=base_path + "/controller_callback",
                     name=task_name, params=task_params,
                     countdown=_CONTROLLER_PERIOD_SEC).add(queue_name)
    except (taskqueue.TombstonedTaskError, taskqueue.TaskAlreadyExistsError), e:
      logging.warning("Task %r with params %r already exists. %s: %s",
                      task_name, task_params, e.__class__, e)
Schedule new update status callback task.

    Args:
      base_path: mapreduce handlers url base path as string.
      mapreduce_spec: mapreduce specification as MapreduceSpec.
      serial_id: id of the invocation as int.
      queue_name: The queue to schedule this task on. Will use the current
        queue of execution if not supplied.
    
mapreduce/handlers.py