class_docstr: Similar to :class:`MapDataComponent`, but perform IPC by shared memory,
  therefore more efficient when data (result of map_func) is large.
  It requires `map_func` to always return a numpy array of fixed shape and dtype, or None.
code: def __len__(self):
      return len(self.ds)
  
imports: import copy
  import ctypes
  import multiprocessing
  import numpy
  import threading
  import zmq
  from six.moves import queue
  from ..utils.concurrency import StoppableThread, enable_death_signal
  from ..utils.serialize import dumps_once, loads_once
  from .base import DataFlow, DataFlowReentrantGuard, ProxyDataFlow
  from .common import RepeatedData, BatchData
  from .parallel import _bind_guard, _get_pipe_name, _MultiProcessZMQDataFlow, _repeat_iter, _zmq_catch_error
label_desc: Use image node_id 3 for calling the MultiProcessMapDataComponentSharedArray obj's underlying member method code with example usage: obj.__len__() and returns: len