code: def collect_tracking_results_cpu(
      result_part: list, tmpdir: Optional[str] = None
  ) -> Optional[list]:
      """Collect results on cpu mode.
  
      Saves the results on different gpus to 'tmpdir' and collects them by the
      rank 0 worker.
  
      Args:
          result_part (list): The part of prediction results.
          tmpdir (str): Path of directory to save the temporary results from
              different gpus under cpu mode. If is None, use `tempfile.mkdtemp()`
              to make a temporary path. Defaults to None.
  
      Returns:
          list or None: The collected results.
      """
      rank, world_size = get_dist_info()
      if world_size == 1:
          return result_part
  
      # create a tmp dir if it is not specified
      if tmpdir is None:
          MAX_LEN = 512
          # 32 is whitespace
          dir_tensor = torch.full((MAX_LEN,), 32, dtype=torch.uint8)
          if rank == 0:
              mkdir_or_exist(".dist_test")
              tmpdir = tempfile.mkdtemp(dir=".dist_test")
              tmpdir = torch.tensor(
                  bytearray(tmpdir.encode()), dtype=torch.uint8
              )
              dir_tensor[: len(tmpdir)] = tmpdir
          broadcast(dir_tensor, 0)
          tmpdir = dir_tensor.numpy().tobytes().decode().rstrip()
      else:
          mkdir_or_exist(tmpdir)
  
      # dump the part result to the dir
      with open(osp.join(tmpdir, f"part_{rank}.pkl"), "wb") as f:  # type: ignore
          pickle.dump(result_part, f, protocol=2)
  
      barrier()
  
      # collect all parts
      if rank != 0:
          return None
      else:
          # load results of all parts from tmp dir
          part_list = []
          for i in range(world_size):
              path = osp.join(tmpdir, f"part_{i}.pkl")  # type: ignore
              with open(path, "rb") as f:
                  part_list.extend(pickle.load(f))
          shutil.rmtree(tmpdir)
          return part_list
  
file_path: mmdetection/mmdet/evaluation/metrics/base_video_metric.py
imports: import os.path
  import pickle
  import shutil
  import tempfile
  import warnings
  from typing import Optional, Sequence
  import torch
  from mmengine.dist import barrier, broadcast, broadcast_object_list, get_dist_info, is_main_process
  from mmengine.evaluator import BaseMetric
  from mmengine.utils import mkdir_or_exist
label_desc: Use image node_id 2 for calling a global function with example usage: collect_tracking_results_cpu(result_part, tmpdir) and returns: result_part, None, part_list