'Called when an answer or a timeout has been received from the server.
This hook is called right before the answer is returned to the client.
You can see it as the counterpart of the ``hook_server_after_exec``.
If the called method was returning a stream (i.e: it uses the
zerorpc.stream decorator) then this hook will be called once the reply
has been fully streamed (when the stream is "closed") or when an
exception has been raised.
The optional exception argument will be a ``RemoteError`` (or whatever
type returned by the client_handle_remote_error hook) if an exception
has been raised on the server.
If the request timed out, then the exception argument will be a
``TimeoutExpired`` object and reply_event will be None.'

def hook_client_after_request(self, request_event, reply_event, exception=None):

    for functor in self._hooks['client_after_request']:
        functor(request_event, reply_event, exception)
