示例#1
0
class RequestManager:
    """
    Wrapper class around Executor for accessing request states and results
    """
    def __init__(self, app=None, name=''):
        self._executor = Executor(app, name)
        self._ticket_dispenser = _TicketDispenser()

    def submit_ticketed(self, function, *args, **kwargs) -> str:
        """
        Submits a function for execution and returns an id for later access to
        the requests state and result.
        :param function: the function
        :param args: the functions arguments
        :return: the id of the submitted execution request
        """
        key = self._ticket_dispenser.get_ticket()
        self._executor.submit_stored(key, function, *args, **kwargs)
        return key

    def request_processed(self, request_id: str) -> bool:
        """
        Checks if a request has already been processed.
        :param request_id: id of the request
        :return: True if the request was processed else False
        """
        return self._executor.futures.done(request_id)

    def get_result(self, request_id: str):
        """
        Returns the result of a finished request.
        :param request_id: id of the request
        :return: the result of the request
        """
        return self._executor.futures.pop(request_id).result()
示例#2
0
def test_coerce_config_types(default_app):
    default_app.config['EXECUTOR_MAX_WORKERS'] = '5'
    default_app.config['EXECUTOR_FUTURES_MAX_LENGTH'] = '10'
    default_app.config['EXECUTOR_PROPAGATE_EXCEPTIONS'] = 'true'
    executor = Executor(default_app)
    with default_app.test_request_context():
        future = executor.submit_stored('fibonacci', fib, 35)
示例#3
0
def test_executor_stored_future(default_app):
    executor = Executor(default_app)
    with default_app.test_request_context():
        future = executor.submit_stored('fibonacci', fib, 35)
    assert executor.futures.done('fibonacci') is False
    assert future in executor.futures
    executor.futures.pop('fibonacci')
    assert future not in executor.futures
示例#4
0
def buildpublish_start():
    global executor
    if executor == None:
        executor = Executor(current_app)

    # if build already in progress, dont start another one
    if executor.futures._state('buildpublish') == 'RUNNING':
        return jsonify(okay=False, error='Build already in progress')

    # get server to publish to
    server = request.form.get('server') or None
    if server == None:
        return jsonify(okay=False, error='No server specified to publish to')

    # start a build-publish
    executor.submit_stored('buildpublish', buildpublish, server)
    return jsonify(okay=True)