class_docstr: Locked Pipe implementation that uses a customizable pickler.
  
  This class is an alternative to the multiprocessing implementation
  of SimpleQueue in order to make it possible to pass custom
  pickling reducers, for instance to avoid memory copy when passing
  memory mapped datastructures.
  
  `reducers` is expected to be a dict with key / values being
  `(type, callable)` pairs where `callable` is a function that, given an
  instance of `type`, will return a tuple `(constructor, tuple_of_objects)`
  to rebuild an instance out of the pickled `tuple_of_objects` as would
  return a `__reduce__` method.
  
  See the standard library documentation on pickling for more details.
class_docstr_tok: ["Locked","Pipe","implementation","that","uses","a","customizable","pickler",".","This","class","is","an","alternative","to","the","multiprocessing","implementation","of","SimpleQueue","in","order","to","make","it","possible","to","pass","custom","pickling","reducers",",","for","instance","to","avoid","memory","copy","when","passing","memory","mapped","datastructures",".","`","reducers","`","is","expected","to","be","a","dict","with","key","\/","values","being","`","(","type",",","callable",")","`","pairs","where","`","callable","`","is","a","function","that",",","given","an","instance","of","`","type","`",",","will","return","a","tuple","`","(","constructor",",","tuple_of_objects",")","`","to","rebuild","an","instance","out","of","the","pickled","`","tuple_of_objects","`","as","would","return","a","`","__reduce__","`","method",".","See","the","standard","library","documentation","on","pickling","for","more","details","."]
code: def _make_methods(self):
      self._recv = recv = self._reader.recv
      racquire, rrelease = self._rlock.acquire, self._rlock.release
  
      def get():
          racquire()
          try:
              return recv()
          finally:
              rrelease()
  
      self.get = get
  
      if self._reducers:
  
          def send(obj):
              buffer = BytesIO()
              CustomizablePickler(buffer, self._reducers).dump(obj)
              self._writer.send_bytes(buffer.getvalue())
  
          self._send = send
      else:
          self._send = send = self._writer.send
      if self._wlock is None:
          # writes to a message oriented win32 pipe are atomic
          self.put = send
      else:
          wlock_acquire, wlock_release = (
              self._wlock.acquire,
              self._wlock.release,
          )
  
          def put(obj):
              wlock_acquire()
              try:
                  return send(obj)
              finally:
                  wlock_release()
  
          self.put = put
  
imports: from mmap import mmap
  import errno
  import os
  import stat
  import sys
  import threading
  import atexit
  import tempfile
  import shutil
  import warnings
  from time import sleep
  from pickle import whichmodule
  from pickle import Pickler
  from pickle import HIGHEST_PROTOCOL
  from io import BytesIO
  from ._multiprocessing_helpers import mp, assert_spawning
  from multiprocessing.pool import Pool
  from .numpy_pickle import load
  from .numpy_pickle import dump
  from .hashing import hash
label_desc: Use image node_id 5 for calling the CustomizablePicklingQueue obj's underlying member method code with example usage: obj._make_methods() and returns: recv, send