async def METHOD_NAME(self, analysis):
    request, stream = analysis
    for index, value in enumerate(self._requests):
        if value is not None:
            ex_request, ex_stream = value
            if (request.instanceId == ex_request.instanceId
                    and request.analysisId == ex_request.analysisId):
                break
    else:
        for index, value in enumerate(self._requests):
            if value is None:
                break
        else:
            raise QueueFull
    try:
        log.debug('%s %s on %s', 'running', req_str(request), index)
        self._requests[index] = (request, stream)
        await self._engines[index].run(request, stream)
        log.debug('%s %s', 'completed', req_str(request))
    except CancelledError:
        log.debug('%s %s', 'cancelled', req_str(request))
        raise
    except Exception as e:
        log.exception(e)
    finally:
        if self._requests[index] == (request, stream):
            self._requests[index] = None