class_docstr: A per-process synchronization lock allowing multiple concurrent holders
  at any one time. This is used in situations where resources might be
  limited and it's important that the number of concurrent users of
  the resources are constrained.
  
  This lock is serializable, but relies on a Python threading.Lock
  underneath to properly synchronize internal state across threads.
  Note that this lock is only intended to be used per-process and
  the underlying threading.Lock will not be serialized.
code: def __getstate__(self):
      d = self.__dict__.copy()
      if "lock" in d:
          del d["lock"]
      return d
  
imports: from threading import Lock
  from asyncio import InvalidStateError
  from cuml.internals.import_utils import check_min_dask_version
  from cuml.common import device_of_gpu_matrix
  from dask.distributed import default_client, wait
  import time
  import random
  import dask
  import logging
  import os
  from cuml.internals.safe_imports import gpu_only_import
label_desc: Use image node_id 4 for calling the MultiHolderLock obj's underlying member method code with example usage: obj.__getstate__() and returns: d