def schedule_slice(cls,
                     base_path,
                     mapreduce_spec,
                     shard_id,
                     slice_id,
                     input_reader,
                     queue_name=None,
                     eta=None,
                     countdown=None):
    """Schedule slice scanning by adding it to the task queue.

    Args:
      base_path: base_path of mapreduce request handlers as string.
      mapreduce_spec: mapreduce specification as MapreduceSpec.
      shard_id: current shard id as string.
      slice_id: slice id as int.
      input_reader: remaining InputReader for given shard.
      queue_name: Optional queue to run on; uses the current queue of
        execution or the default queue if unspecified.
      eta: Absolute time when the MR should execute. May not be specified
        if 'countdown' is also supplied. This may be timezone-aware or
        timezone-naive.
      countdown: Time in seconds into the future that this MR should execute.
        Defaults to zero.
    """
    task_params = MapperWorkerCallbackHandler.worker_parameters(
        mapreduce_spec, shard_id, slice_id, input_reader)
    task_name = MapperWorkerCallbackHandler.get_task_name(shard_id, slice_id)
    queue_name = os.environ.get("HTTP_X_APPENGINE_QUEUENAME",
                                queue_name or "default")
    try:
      taskqueue.Task(url=base_path + "/worker_callback",
                     params=task_params,
                     name=task_name,
                     eta=eta,
                     countdown=countdown).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 slice scanning by adding it to the task queue.

    Args:
      base_path: base_path of mapreduce request handlers as string.
      mapreduce_spec: mapreduce specification as MapreduceSpec.
      shard_id: current shard id as string.
      slice_id: slice id as int.
      input_reader: remaining InputReader for given shard.
      queue_name: Optional queue to run on; uses the current queue of
        execution or the default queue if unspecified.
      eta: Absolute time when the MR should execute. May not be specified
        if 'countdown' is also supplied. This may be timezone-aware or
        timezone-naive.
      countdown: Time in seconds into the future that this MR should execute.
        Defaults to zero.
    
mapreduce/handlers.py