主要内容

未来

计划运行的函数

描述

一个未来object表示计划在MATLAB中运行的函数®

  • 如果你使用parfevalparfevalOnAll要创建未来, MATLAB运行函数:

    • 在后台,如果你指定的话backgroundPool当创建未来

    • 在并行池上,如果未指定backgroundPool当创建未来,拥有并行计算工具箱™,并适用于以下其中一项:

      • 您有一个当前打开的并行池。

      • 您已经启用了自动创建池。

    • 串行,否则。

  • 如果你使用afterEach毕竟要创建未来,该函数由您当前的MATLAB会话运行。它不是在后台运行,也不是在任何并行池上运行。

创建

创建一个未来当您执行下列操作之一时:

  • 使用parfeval调度一个函数在后台、并行池或串行中运行。

  • 使用parfevalOnAll调度一个函数在池中或串行的所有worker上运行。

  • 使用afterEach毕竟计划一个函数在其之后运行未来对象完成。

接下来是未来对象的可用类型。

未来的对象 描述
FevalFuture parfeval
FevalOnAllFuture parfevalOnAll
AfterEachFuture afterEach
AfterAllFuture 毕竟

属性

全部展开

一般选择

此属性是只读的。

的日期和时间未来对象被创建,指定为datetime标量。

此属性是只读的。

错误信息,指定为MException的标量或单元格数组异常对象。

  • 如果你创建一个未来对象使用parfeval毕竟,此属性是单元格数组或异常标量。如果未来对象完成时没有错误,则此属性为空。

  • 如果你创建一个未来对象使用afterEach属性是一个单元格数组,每次执行一个单元格未来出错了,还是a1——- - - - - -1单元格数组,如果未来被取消了。如果未来对象完成时没有错误,则此属性为空。

  • 如果你创建一个未来对象使用parfevalOnAll,此属性是一个单元格数组,如果在工人上发生任何错误,则每个工人都有一个单元格1——- - - - - -1单元格数组,如果未来被取消了。如果未来对象完成时没有错误,则此属性为空。

有关计划运行某个函数时遇到的错误的详细信息未来对象完成,请参见afterEach而且毕竟

此属性是只读的。

函数完成的日期和时间,指定为datetime标量。

未来当MATLAB运行完与其相关的函数时,该函数就结束运行。

如果函数与未来对象未完成运行,则此属性为空datetime数组中。

数据类型:datetime

此属性是只读的。

函数与未来对象,指定为函数句柄。

  • 如果您创建未来使用parfevalparfevalOnAll, MATLAB在后台、并行池(如果您有并行计算工具箱)或串行上运行函数。

  • 如果您创建未来使用afterEach毕竟,该函数由您当前的MATLAB会话运行。它不是在后台运行,也不是在任何并行池上运行。

例子:@magic

数据类型:function_handle

此属性是只读的。

标识符,指定为整数标量。

数据类型:

此属性是只读的。

输入函数的参数,指定为单元格数组。

当调度函数fcn函数属性运行,它运行为fcn (X {:}),在那里X此属性指定的输入参数的单元格数组。

例子:{[1]}

例子:{[1, 2], (2, 1)}

数据类型:细胞

此属性是只读的。

函数返回的参数个数,指定为整数标量。

属性指定的函数函数属性必须返回至少与此属性指定的相同数量的参数。

数据类型:

此属性是只读的。

运行函数的输出参数,指定为单元格数组。

属性为空单元格数组未来对象未完成运行或未来对象以错误结束。

例子:{[3.14]}

数据类型:细胞

的当前持续时间未来对象,指定为持续时间标量。

未来对象完成运行后,此属性变为常量。

此属性是只读的。

的日期和时间未来对象开始运行,指定为datetime标量。

未来当MATLAB开始运行与它相关的函数时开始运行。

数据类型:datetime

此属性是只读的。

未来的当前状态,指定为以下值之一:

  • “排队”- - - - - -未来处于队列中,并计划与之关联的函数运行。

  • “奔跑”对象关联的函数未来当前正在运行。

  • “完成”“失败”对象关联的函数未来完成了运行。

  • “不可用”- - - - - -未来无法运行。预分配的元素未来数组都有这个状态。

FevalFuture选项

此属性是只读的。

文本输出,指定为字符向量。

属性指定的函数,此属性是一个字符向量,其中包含显式运行时显示的所有文本函数属性指定的输入参数InputArguments财产。

此属性是只读的。

队列的未来对象,指定为平行的。FevalQueue对象。

这个属性等于的队列未来对象的FevalQueue未来所依赖的池子。

此属性不可用未来在基于线程的环境中运行函数的对象。

此属性是只读的。

标志,指示输出是否已读取,指定为真正的

此属性设置为真正的只有当你使用fetchOutputsfetchNext

数据类型:逻辑

FevalOnAllFuture选项

此属性是只读的。

记录的文本,指定为字符向量的单元格数组。

属性指定的函数,此单元格数组包含显式运行时显示的所有文本函数属性指定的输入参数InputArguments财产。

jth元素中捕获的文本输出th泳池里的工作人员未来

数据类型:细胞

此属性是只读的。

队列的未来对象,指定为平行的。FevalQueue对象。

这个属性等于的队列未来对象的FevalQueue未来所依赖的池子。

此属性不可用未来在基于线程的环境中运行函数的对象。

对象的功能

全部展开

毕竟 在所有函数在后台运行完毕后再运行函数
afterEach 在每个函数在后台运行结束后再运行函数
取消 停止在后台运行的函数
fetchOutputs 从后台运行的函数中检索结果
等待 等待期货完成
fetchNext 检索下一个未读输出未来数组

例子

全部折叠

这个例子展示了如何使用afterEach调度回调函数在某个函数在后台运行结束后运行。

使用parfeval运行函数兰特(1)并检索一个输出。指定backgroundPool作为在后台运行函数的第一个参数。重复10次,创建10个未来对象。

i = 1:10 f(i) = parfeval(backgroundPool,@rand, 1,1);结束

在每一个未来控件显示该值disp函数。的输入参数disp输出参数是否来自每一个未来。属性的第三个参数afterEach函数作为0从回调中不返回输出。

afterEach (f @disp 0);

这个例子展示了如何使用afterEach用后台运行的函数的进度更新等待栏。

创建一个等待栏,w

W = waitbar(0,“请稍等……”);

为您的循环,N。存储当前已完成迭代的数量,0,为总迭代次数,N,在用户数据属性。

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

运行一个循环与N迭代。在每次迭代中,使用parfeval而且backgroundPool运行暂停在后台随机播放一段时间。存储每个未来对象。

i = 1:N延迟= rand;f(i) = parfeval(backgroundPool,@pause,0,delay);结束

使用helper函数updateWaitbar每次更新后更新等待栏未来完成。

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

使用删除关闭等待栏后的一切未来对象完成。

毕竟(f, @(~)删除(w), 0);

定义Helper函数

定义辅助函数updateWaitbar。函数的第一个元素加1用户数据属性,然后使用该向量计算进度。

函数updateWaitbar (w)使用UserData属性更新一个等待栏。检查该等待栏是否是已删除对象的引用如果isvalid (w)增加已完成迭代的数量w.UserData(1) = w.UserData(1) + 1;计算进度progress = w.UserData(1) / w.UserData(2);更新等待栏waitbar(进步,w);结束结束

这个例子展示了如何停止在后台运行的MATLAB函数。当你使用parfeval在后台运行一个函数,MATLAB立即返回一个未来对象。长时间运行的函数可以阻止其他函数在后台运行。要停止该函数运行,必须使用取消函数而不是选择现场编辑>执行>停止

使用parfeval运行暂停(正)没有检索任何输出。指定backgroundPool作为在后台运行函数的第一个参数。当你使用parfeval,则创建一个未来对象。

f = parfeval(backgroundPool,@pause,0,Inf);

的状态未来对象。

f.State
Ans =“奔跑”

当你奔跑parfeval,您安排一个函数在后台运行。当后台池没有足够的资源运行该函数时,可以使用未来“排队”状态。当该函数由后台池运行时,将未来“奔跑”状态。

若要停止该函数在后台运行,请取消未来对象。

取消f.State (f)
Ans = 'finished'

函数现在在“完成”状态。

提示

  • 未来对象是本地对象,只能在创建它们的MATLAB会话中访问。

    例如,如果你使用parfeval在后台运行一个函数并创建一个未来对象,未来在后台工作人员的工作空间中不可用。

版本历史

在R2013b中引入

另请参阅

(并行计算工具箱)|(并行计算工具箱)|(并行计算工具箱)||