afterEach

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

    Описание

    пример

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

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

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

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

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

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

    Примеры

    свернуть все

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

    Используйте parfeval запускать функциональный rand(1) и получите тот выход. Задайте backgroundPool в качестве первого аргумента, который запустит функцию в фоновом режиме. Повторитесь 10 раз, чтобы создать 10 Future объекты.

    for i = 1:10
        f(i) = parfeval(backgroundPool,@rand, 1, 1);
    end

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

    afterEach(f,@disp,0);

    В этом примере показано, как использовать 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, afterEach все еще запуски fcn использование того элемента.

    • Если вы задаете PassFuture как true, MATLAB запускает fcn(Aj) после каждого Future элемент Aj в A концы.

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

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

      Если любой из элементов в A сталкивается с ошибкой, и вы задаете PassFuture как true, Error свойство B массив ячеек с тем же числом элементов как A.

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

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

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

    Пример: fcn = @magic

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

    • Если вы задаете PassFuture как trueN количество выходных аргументов, которые требуют от выполнения fcn(A(j)) использование каждого элемента A(j) в 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 массив пустой ячейки, даже если один или несколько элементов в A столкнитесь с ошибкой.

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

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

    | |