code: def __del__(self):
      try:
          if not self._reset_done:
              return
          if not self.context.closed:
              self.socket.close(0)
              self.context.destroy(0)
          for x in self._procs:
              x.terminate()
              x.join(5)
          print(
              "{} successfully cleaned-up.".format(type(self).__name__)
          )
      except Exception:
          pass
  
imports: import atexit
  import pickle
  import errno
  import traceback
  import itertools
  import multiprocessing
  import os
  import sys
  import uuid
  import weakref
  from contextlib import contextmanager
  import zmq
  from six.moves import queue, range
  from ..utils import logger
  from ..utils.concurrency import StoppableThread, enable_death_signal, ensure_proc_terminate, start_proc_mask_signal
  from ..utils.serialize import dumps_once, loads_once
  from .base import DataFlow, DataFlowReentrantGuard, DataFlowTerminated, ProxyDataFlow
label_desc: Use image node_id 4 for calling the _MultiProcessZMQDataFlow obj's underlying member method code with example usage: obj.__del__() without return types