<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def end_request(req, collector_addr='tcp://127.0.0.2:2345', prefix='my_app'):
 """ registers the end of a request registers the end of a request, computes elapsed time, sends it to the collector :param req: request, can be mostly any hash-able object :param collector_addr: collector address, in zeromq format (string, default tcp://127.0.0.2:2345) :param prefix: label under which to register the request (string, default my_app) """


    req_end = time()
    hreq = hash(req)

    if hreq in requests:
        req_time = req_end - requests[hreq]
        req_time *= 1000

        del requests[hreq]

        collector = get_context().socket(zmq.PUSH)

        collector.connect(collector_addr)
        collector.send_multipart([prefix, str(req_time)])
        collector.close()

        return req_time