code: def changed(self):
      while True:
          try:
              m_time = os.stat(self._config_path).st_mtime
              if m_time > self._last_m:
                  # try to load new config
                  try:
                      self._config = load_dataset_config(
                          self._config_path
                      )
                  except Exception as e:
                      # failed to load config
                      print(
                          "Error: load new config in changed, "
                          "self._config_path={path}, err={err}".format(
                              path=self._config_path, err=str(e)
                          )
                      )
  
                      return False
                  # new config loaded
                  self._last_m = m_time
                  return True
              return False
          except Exception as e:
              print(
                  "Error: reading info list in _MixedDatasetConfigMananger.changed!, "
                  "self._config_path={path}, err={err}".format(
                      path=self._config_path, err=str(e)
                  )
              )
              time.sleep(30)
  
imports: from collections import OrderedDict
  import multiprocessing
  import os
  from queue import Empty
  from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
  from typing_extensions import TypedDict
  from ...dataset import DistributedDataset
  from ...tokenizers import CPMBeeTokenizer
  from ...utils.config import load_dataset_config
  import numpy
  import time
  from numpy.typing import NDArray
  import torch
  import bmtrain
  import importlib.machinery
  import importlib.util
  import types
  import random
label_desc: Use image node_id 2 for calling the _MixedDatasetConfigMananger obj's underlying member method code with example usage: obj.changed() and returns: False, True, False