使用afterEach
而且毕竟
运行回调函数
您创建一个未来
当您在后台运行函数或在并行池上使用parfeval
,parfevalOnAll
,afterEach
,或毕竟
.您可以使用afterEach
而且毕竟
在一个或多个回调函数之后自动运行未来
对象完成。
如果你使用
afterEach
, MATLAB®在每个之后运行回调函数未来
对象完成。如果未来
数组米
元素,MATLAB客户端运行回调函数米
次了。如果你使用
afterEach
, MATLAB终究运行回调函数未来
对象完成。如果未来
数组米
元素,MATLAB客户端运行回调函数只运行一次。
调用afterEach
在parfeval
计算
您可以使用afterEach
的每个结果上自动调用函数parfeval
计算。
使用parfeval
计算工人中的随机向量。默认首选项,parfeval
创建一个parpool
如果没有创建,则自动。
为Idx = 1:10 f(Idx) = parfeval(@rand, 1,1,000, 1);结束
在这些向量被创建之后,显示它们中的最大元素。afterEach
在每个future的输出准备就绪时,执行它们的函数句柄。
afterEach(f, @(r) disp(max(r)), 0);
0.9975 0.9990 0.9982 0.9991 0.9982 0.9998 0.9999 0.9986 0.9996 0.9990
调用毕竟
在parfeval
计算
您可以使用毕竟
的所有组合输出上自动调用函数parfeval
计算。
使用parfeval
计算工人中的随机向量。默认首选项,parfeval
创建一个parpool
如果没有创建,则自动。
为Idx = 1:10 f(Idx) = parfeval(@rand, 1,1,000, 1);结束
在创建所有这些向量之后,显示其中最大的元素。毕竟
当所有期货都准备好时,在所有期货的组合输出上执行函数句柄。
afterAll(f, @(r) disp(max(r)), 0);
0.9998
结合afterEach
而且毕竟
您可以组合afterEach
而且毕竟
对期货的结果自动调用更多的函数。这两个afterEach
而且毕竟
生成可以在中再次使用的未来变量afterEach
而且毕竟
.
使用parfeval
计算工人中的随机向量。默认首选项,parfeval
创建一个parpool
如果没有创建,则自动。
为Idx = 1:10 f(Idx) = parfeval(@rand, 1,1,000, 1);结束
使用“本地”配置文件启动并行池(parpool)…连接8个工人。
当这些向量准备好时,计算它们中最大的元素。afterEach
在每个future的输出准备就绪时,对它们执行函数句柄,并创建另一个future来保存结果。
maxFuture = afterEach(f, @(r) max(r), 1);
要计算其中的最小值,调用毕竟
在这个新的未来。毕竟
在所有期货完成后,对它们的组合输出参数执行一个函数。在这种情况下,毕竟
执行的函数最小值
的输出maxFuture
并创建另一个future来保存结果。
minFuture = afterAll(maxFuture, @(r) min(r), 1);
您可以使用fetchOutputs
.fetchOutput
等待未来完成收集结果。
fetchOutputs (minFuture)
ans = 0.9973
你可以检查的结果afterEach
通过调用fetchOutputs
它的未来变量。
fetchOutputs (maxFuture)
ans =10×10.9996 0.9989 0.9994 0.9973 1.0000 1.0000 0.9989 0.9994 0.9998 0.9999
异步更新用户界面使用afterEach
而且毕竟
这个例子展示了如何在计算完成时更新用户界面。当您将计算卸给使用parfeval
,当工人执行这些计算时,所有用户界面都是响应的。在本例中,您使用waitbar
创建一个简单的用户界面。
使用
afterEach
在每次计算完成后更新用户界面。使用
毕竟
在所有计算完成后更新用户界面。
使用waitbar
要创建图形句柄,h
.当你使用afterEach
或毕竟
,waitbar
函数更新图句柄。有关句柄对象的更多信息,请参见处理对象的行为.
h = waitbar (0,“等……”);
使用parfeval
计算随机矩阵特征值的实部。默认首选项,parfeval
如果尚未创建并行池,则自动创建并行池。
为idx = 1:10 0 f (idx) = parfeval (@ (n)真实(eig (randn (n))), 1、5 e2);结束
您可以使用afterEach
的每个结果上自动调用函数parfeval
计算。使用afterEach
计算每个future完成后每个输出数组中的最大值。
maxFuture = afterEach (f @max 1);
您可以使用状态
物业获得期货的地位。创建一个逻辑数组状态
期货的属性f
是“完成”
.使用的意思是
计算完成期货的比例。然后,创建一个匿名函数updateWaitbar
.的分数等待条长度h
到完成的期货的一部分。
updateWaitbar = @(~) waitbar(mean({f。州}= =“完成”), h);
使用afterEach
而且updateWaitbar
在每个future in之后更新分数等待条长度maxFuture
完成。使用毕竟
而且删除
在所有计算完成后关闭等待栏。
updateWaitbarFutures = afterEach (f updateWaitbar 0);毕竟(updateWaitbarFutures @(~)删除(h), 0);
使用毕竟
而且柱状图
显示结果的直方图maxFuture
在所有的期货完成之后。
showsHistogramFuture =毕竟(maxFuture @histogram 0);
处理将来变量中的错误
默认情况下,当对未来变量的计算导致错误时,afterEach
不会对失败的元素求函数值。如果您想处理任何错误,例如,您有一个想要更新的用户界面,您可以使用名称-值对PassFuture
.当设置为真正的
, future变量被传递给回调函数。你可以叫fetchOutputs
在它上,处理输出,并处理任何可能的错误。
将计算结果发送给使用parfeval
.默认首选项,parfeval
创建一个parpool
如果没有创建,则自动。如果你的parfeval
计算结果会产生一个错误,即未来变量的错误错误
属性反映了它。
errorFuture = parfeval(@(n) randn(n), 0, 0.5);等待(errorFuture);errorFuture。错误
ans = ParallelException带有属性:identifier: 'MATLAB:NonIntegerInput'消息:'大小输入必须是整数。' cause: {} remotecause: {[1×1 MException]} stack: [1×1 struct]
如果你使用afterEach
在那个future中,回调函数不会在那些future中出错的元素上求值。在下面的代码中对话框
因为将来的错误而不执行。
afterEach (errorFuture @()对话框(“操作完成”), 0);
要处理导致错误的期货,请使用名称-值对PassFuture
当调用afterEach
.future变量被传递给回调函数,而不是它的输出。调用fetchOutputs
对未来变量,并处理其输出。如果未来的结果是一个错误,fetchOutputs
抛出您可以捕获和处理的错误。以下代码显示了一个错误对话框。
afterEach (errorFuture @handleError 0,“PassFuture”,真正的);
函数handleError (f)试一试输出= fetchOutputs (f);%对输出做一些事情抓errordlg (“操作失败”);结束结束