'Get a document parser for http_response
This parses the http_response in a pool worker. This method has two
features:
* We can kill the worker if the parser is taking too long
* We can have different parsers
:param http_response: The http response instance
:return: An instance of DocumentParser'

def get_document_parser_for(self, http_response):

    self.start_workers()
    hash_string = get_request_unique_id(http_response, prepend='parser')
    apply_args = (process_document_parser, http_response, self._processes, hash_string, self.DEBUG)
    result = self._pool.apply_async(apply_with_return_error, (apply_args,))
    try:
        parser_output = result.get(timeout=self.PARSER_TIMEOUT)
    except multiprocessing.TimeoutError:
        self._kill_parser_process(hash_string, http_response)
        msg = ('There    is    no    parser    for    "%s".' % http_response.get_url())
        raise BaseFrameworkException(msg)
    else:
        if isinstance(parser_output, Error):
            parser_output.reraise()
    finally:
        self._processes.pop(hash_string, None)
    return parser_output
