class_docstr: TaskGenerator interface.
  
  When their `generate` method is invoked (typically done periodically within an
  orchestration loop), concrete classes implementing this interface are expected
  to generate tasks to execute nodes in a pipeline IR spec or system tasks (eg:
  for garbage collection) based on the state of pipeline execution and related
  details stored in an MLMD db.
  
  Note on thread safety: Concrete classes of this interface need not have a
  thread-safe implementation. Onus is on the caller to serialize concurrent
  calls to `generate`. Since MLMD db may be updated upon call to `generate`,
  it's also not safe to invoke `generate` concurrently on different instances
  of `TaskGenerator` that refer to the same MLMD db and the same pipeline IR.
docstr: Generates a list of tasks to be performed.
  
  Args:
    pipeline_state: The `PipelineState` object associated with the pipeline
      for which to generate tasks.
  
  Returns:
    A list of `Task`s specifying nodes in a pipeline to be executed or other
    system tasks.
docstr_tok: ["Generates","a","list","of","tasks","to","be","performed",".","Args",":","pipeline_state",":","The","`","PipelineState","`","object","associated","with","the","pipeline","for","which","to","generate","tasks",".","Returns",":","A","list","of","`","Task","`","s","specifying","nodes","in","a","pipeline","to","be","executed","or","other","system","tasks","."]
code: def generate(
      self, pipeline_state: pstate.PipelineState
  ) -> List[task_lib.Task]:
      """Generates a list of tasks to be performed.
  
      Args:
        pipeline_state: The `PipelineState` object associated with the pipeline
          for which to generate tasks.
  
      Returns:
        A list of `Task`s specifying nodes in a pipeline to be executed or other
        system tasks.
      """
  
imports: import abc
  from typing import List
  from tfx.orchestration.experimental.core import pipeline_state
  from tfx.orchestration.experimental.core import task
label_desc: Use image node_id 1 for calling the TaskGenerator obj's underlying member method code with example usage: obj.generate(pipeline_state) without return types