docs: def sendRequest(self, socket, cmd, args=(), timeout=10):
          '''
          Perform client request/reply
          Request is a ZMQ multipart message:
           - command string
           - pickled argument list
          Reply is a pickled object
          '''
          self._logger.debug("sending request %s %s" % (cmd, args))
          t0= time.time()
          self._sendMultiPartWithBarrierTimeout(
              socket,
              [cmd.encode(),
               pickle.dumps(args, Constants.PICKLE_PROTOCOL)],
              timeout)
          toBeReturned= self.receiveWithTimeout(socket, timeout)
          retObj= pickle.loads(toBeReturned, **pickle_options)
          self._logger.debug("%s received %s in %.3fs" % (
              cmd, str(retObj), time.time() - t0))
          if isinstance(retObj, Exception):
              raise retObj
          else:
              return retObj