Perform client request/reply
        Request is a ZMQ multipart message:
         - command string
         - pickled argument list
        Reply is a pickled object

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