class_docstr: A delayed implementation based on TrainerRM, which means `train` method may only do some preparation and `end_train` method can do the real model fitting.
class_docstr_tok: ["A","delayed","implementation","based","on","TrainerRM",",","which","means","`","train","`","method","may","only","do","some","preparation","and","`","end_train","`","method","can","do","the","real","model","fitting","."]
docstr: Same as `train` of TrainerRM, after_status will be STATUS_PART_DONE.
  
  Args:
      tasks (list): a list of definition based on `task` dict
      train_func (Callable): the train method which need at least `tasks` and `experiment_name`. Defaults to None for using self.train_func.
      experiment_name (str): the experiment name, None for use default name.
  
  Returns:
      List[Recorder]: a list of Recorders
docstr_tok: ["Same","as","`","train","`","of","TrainerRM",",","after_status","will","be","STATUS_PART_DONE",".","Args",":","tasks","(","list",")",":","a","list","of","definition","based","on","`","task","`","dict","train_func","(","Callable",")",":","the","train","method","which","need","at","least","`","tasks","`","and","`","experiment_name","`",".","Defaults","to","None","for","using","self.train_func",".","experiment_name","(","str",")",":","the","experiment","name",",","None","for","use","default","name",".","Returns",":","List","[","Recorder","]",":","a","list","of","Recorders"]
code: def train(
      self,
      tasks: list,
      train_func=None,
      experiment_name: str = None,
      **kwargs,
  ) -> List[Recorder]:
      """
      Same as `train` of TrainerRM, after_status will be STATUS_PART_DONE.
  
      Args:
          tasks (list): a list of definition based on `task` dict
          train_func (Callable): the train method which need at least `tasks` and `experiment_name`. Defaults to None for using self.train_func.
          experiment_name (str): the experiment name, None for use default name.
  
      Returns:
          List[Recorder]: a list of Recorders
      """
      if isinstance(tasks, dict):
          tasks = [tasks]
      if len(tasks) == 0:
          return []
      _skip_run_task = self.skip_run_task
      self.skip_run_task = (
          False  # The task preparation can't be skipped
      )
      res = super().train(
          tasks,
          train_func=train_func,
          experiment_name=experiment_name,
          after_status=TaskManager.STATUS_PART_DONE,
          **kwargs,
      )
      self.skip_run_task = _skip_run_task
      return res
  
imports: import socket
  from typing import Callable, List, Optional
  from tqdm.auto import tqdm
  from qlib.config import C
  from qlib.data.dataset import Dataset
  from qlib.data.dataset.weight import Reweighter
  from qlib.log import get_module_logger
  from qlib.model.base import Model
  from qlib.utils import auto_filter_kwargs, fill_placeholder, flatten_dict, init_instance_by_config
  from qlib.utils.paral import call_in_subproc
  from qlib.workflow import R
  from qlib.workflow.recorder import Recorder
  from qlib.workflow.task.manage import TaskManager, run_task
label_desc: Use image node_id 2 for calling the DelayTrainerRM obj's underlying member method code with example usage: obj.train(tasks, train_func, experiment_name) and returns: res, list