afterEach
指定要在每次并行之后调用的函数。将来完成
语法
描述
行为相同,如果outputFuture
= afterEach (期货
,funtocall
,nout
“PassFuture”,passFuture
)passFuture
是假
.如果passFuture
是真正的
,afterEach
调用funtocall
中的每个元素期货
,而不是它们的输出参数。这即使发生在元素期货
遇到错误。
例子
调用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
结合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
保持用户界面的响应性。使用afterEach
在中间计算准备就绪时更新用户界面。使用毕竟
当所有计算准备就绪时,更新用户界面。
创建一个简单的用户界面waitbar
.
H = waitbar(0,“等……”);
使用parfeval
在工体中进行耗时的计算,例如,随机矩阵的特征值。计算是异步进行的,并且在计算期间更新用户界面。在默认首选项下,parfeval
创建一个parpool
如果没有创建,则自动。
为Idx = 1:100 f(Idx) = parfeval(@(n) real(eig(randn(n))), 1,5e2);结束
在每个计算中,当它们准备使用时,计算最大的值afterEach
.当每个期货完成使用时,更新等待栏中已完成期货的比例afterEach
.
maxFuture = afterEach(f, @max, 1);updateWaitbarFuture = afterEach(f, @(~) waitbar(sum(strcmp()“完成”, {f. state}))/numel(f), h), 1);
当所有的计算都完成时,关闭等待栏。使用毕竟
在updateWaitbarFuture
用关闭操作自动继续。毕竟
获取图形句柄updateWaitbarFuture
并在上面执行它的功能。
closeWaitbarFuture = afterAll(updateWaitbarFuture, @(h) delete(h), 0);
显示一个直方图后,所有的最大值计算。使用毕竟
在maxFuture
自动继续操作。毕竟
获取最大值maxFuture
并调用柱状图
在他们身上。
showsHistogramFuture = afterAll(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)试一试output = fetchOutputs(f);%对输出做一些事情抓errordlg (“操作失败”);结束结束
输入参数
期货
- - - - - -期货
平行的。未来
的数组指定的期货平行的。未来
.funtocall
在每个元素就绪时对它们进行调用。你可以用parfeval
创造未来。
的元素期货
遇到一个错误,funtocall
的元素没有求值期货
的其他元素期货
不遇到错误。要查看是否有任何带有错误的期货,可以检查错误
的属性outputFuture
.如果没有错误,此属性是一个空单元格数组。如果有错误,则它是一个包含与未来相同数量单元格的单元格数组期货
.的对应元素,则单元格包含错误期货
遇到错误,否则为空。如果你消去一个元素期货
,这会导致与元素遇到错误相同的行为。
例子:Future = parfeval(@rand, 1,1,000,1);afterEach(未来@max 1);
数据类型:平行的。未来
funtocall
- - - - - -执行的函数
函数处理
nout
- - - - - -输出数
整数
passFuture
- - - - - -的输入参数的类型funtocall
逻辑标量
指示符,指定为一个逻辑标量,用于确定输入参数的类型funtocall
.如果设置为真正的
,每个未来都在期货
传递给funtocall
.否则,每个future in的输出参数期货
传递给funtocall
.这个参数是可选的假
默认情况下。
如果想处理任何错误,可以使用这种方法。集passFuture
来真正的
这afterEach
调用funtocall
中的每个元素期货
即使他们遇到了错误。你必须打电话fetchOutputs
的输入参数funtocall
提取结果。如果有错误的期货,fetchOutputs
抛出您可以捕获和处理的错误。
例子:afterEach(期货、@ (f) disp (fetchOutputs (f)), 0, PassFuture,真的)
数据类型:逻辑标量
输出参数
outputFuture
——未来
平行的。未来
未来,归为一平行的。未来
保存评估结果funtocall
每一个期货期货
当他们准备好了。要提取结果,请调用fetchOutputs
在outputFuture
.
提示
使用
afterEach
任何一个未来的人parfeval
,parfevalOnAll
,毕竟
,afterEach,
或者一个包含它们组合的数组。例如,使用afterEach
对另一个函数的结果自动调用更多函数毕竟
或afterEach
.你可以调用afterEach
期货交割前后的交易。使用
取消
从一个未来返回afterEach
取消其执行。如果你调用afterEach
在被取消的未来,afterEach
行为方式与未来发生错误相同。
在R2018a中介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。