afterAll

Запустите функцию после того, как все функции закончат запускаться в фоновом режиме

    Описание

    пример

    B = afterAll(A,fcn,n) возвращает Future объект B и запускает функциональный fcn автоматически после всех элементов в Future массив A конец.

    MATLAB® запускает функциональный fcn использование конкатенированных выходных параметров от каждого элемента в A. Выходные параметры Y1,...,Ym от каждого Future объект конкатенирован вертикально в линейном порядке индекса. Например, если A двухэлементный Future вектор с выходными параметрами y1 и y2 от первого и второго Future объекты соответственно, MATLAB запускает fcn([y1; y2]) после всех элементов в A конец.

    Если Future массив A имеет M элементы, MATLAB запускает функцию только однажды. Когда запланированный функциональный fcn концы, Future объект B концы.

    Вы создаете Future объект, когда:

    • Вы запускаете функцию в фоновом режиме с помощью backgroundPool.

    • Вы запускаете функцию на параллельном пуле, когда у вас есть Parallel Computing Toolbox™.

    Для получения дополнительной информации об использовании afterAll параллельно, смотрите Использование afterEach и afterAll, чтобы Запустить Функции обратного вызова (Parallel Computing Toolbox).

    Если любой из элементов в A сталкивается с ошибкой, Error свойство B MException.

    B = afterAll(A,fcn,n,PassFuture=true) запуски fcn(A) вместо того, чтобы использовать конкатенированные выходные параметры каждого элемента в A.

    Error свойство B пустой MException массив, даже если один или несколько элементов в A столкнитесь с ошибкой.

    Примеры

    свернуть все

    В этом примере показано, как использовать afterEach обновить панель ожидания с прогрессом функций, запускающихся в фоновом режиме.

    Создайте панель ожидания, w.

    w = waitbar(0,'Please wait ...');

    Определите номер итераций для вашего for- цикл, N. Сохраните текущее количество завершенных итераций, 0, и общее количество итераций, N, в UserData свойство панели ожидания.

    N = 20;
    w.UserData = [0 Н];

    Запустите for- цикл с N итерации. В каждой итерации используйте parfeval и backgroundPool запускать pause в фоновом режиме для случайного числа секунд. Сохраните каждый Future объект в массиве.

    for i = 1:N
        delay = rand;
        f(i) = parfeval(backgroundPool,@pause,0,delay);
    end

    Используйте функцию помощника updateWaitbar обновить waitbar после каждого Future концы.

    afterEach(f,@(~)updateWaitbar(w),0);

    Используйте delete закрыть панель ожидания после всего Future конец объектов.

    afterAll(f,@(~)delete(w),0);

    Задайте функцию помощника

    Задайте функцию помощника updateWaitbar. Функция постепенно увеличивает первый элемент UserData свойство, затем использует вектор, чтобы вычислить прогресс.

    function updateWaitbar(w)
        % Update a waitbar using the UserData property.
    
        % Check if the waitbar is a reference to a deleted object
        if isvalid(w)
            % Increment the number of completed iterations 
            w.UserData(1) = w.UserData(1) + 1;
    
            % Calculate the progress
            progress = w.UserData(1) / w.UserData(2);
    
            % Update the waitbar
            waitbar(progress,w);
        end
    end

    Входные параметры

    свернуть все

    Введите Future объект в виде parallel.Future скаляр или массив.

    MATLAB запускает функциональный fcn после каждого элемента в A концы. Если любой из элементов в A сталкивается с ошибкой, и вы задаете PassFuture как true, afterAll все еще запуски fcn использование того элемента.

    • Если вы задаете PassFuture как true, функция запущена как fcn(Aj) использование каждого Future элемент Aj в A. Если любой из элементов в A сталкивается с ошибкой, afterAll не заканчивается с ошибкой.

    • В противном случае функция запущена как fcn(X1,...,Xm) использование выходных параметров X1,...,Xm от каждого Future элемент в A. Если любой из элементов в A сталкивается с ошибкой, afterAll концы с ошибкой.

    Если Future массив имеет M элементы, MATLAB запускает функциональный M \times. Когда запланированный функциональный fcn концы, Future объект B концы.

    Пример: A = parfeval(backgroundPool,@magic,1,3);

    Функция обратного вызова, чтобы запуститься в виде указателя на функцию.

    Пример: fcn = @magic

    Количество выходных аргументов в виде неотрицательного целочисленного скаляра.

    • Если вы задаете PassFuture как trueN количество выходных аргументов, ожидаемых от выполнения fcn(A) использование Future массив A.

    • В противном случае, n количество выходных аргументов, ожидаемых от выполнения fcn(Y1,...,Ym) использование вертикально конкатенированных выходных параметров Y1,...,Ym от каждого элемента Aj в Future массив A.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Выходные аргументы

    свернуть все

    Выведите Future объект, возвращенный как parallel.Future объект.

    • Использование fetchOutputs получать результаты B.

    • Использование afterEach или afterAll запускать функцию когда B завершается.

    Когда вы устанавливаете PassFuture, вы изменяете Error свойство B:

    • Если PassFuture true, Error свойство B пустой MException массив, даже если один или несколько элементов в A столкнитесь с ошибкой.

    • В противном случае, если любой из элементов в A сталкивается с ошибкой, Error свойство B MException объект.

      Чтобы найти причину ошибки, используйте cause свойство B.Error.

    Смотрите также

    | |